MongoDB中在$cond内使用$in未达预期效果的问题
解决MongoDB中$cond结合$in返回错误结果的问题
我来帮你排查下这个问题~你遇到的核心问题是嵌套数组的匹配逻辑错误:
你的following字段是一个包含对象的数组,每个对象里又嵌套了followingProfiles数组。当你直接使用$following.followingProfiles时,MongoDB返回的是一个嵌套数组(比如你的例子里是[["5f11fffea15f9631a4de850f"]]),但$in操作符需要的是一维数组来做匹配,所以自然匹配不上,导致isFollowing返回false。
修正方案
我们需要先把嵌套的followingProfiles数组展平成一维数组,这里可以用$reduce结合$concatArrays来实现:
{ $project: { 'profile': 1, 'isFollowing': { $cond: [ { $in: [ '$profile', { $reduce: { input: '$following', initialValue: [], in: { $concatArrays: ['$$value', '$$this.followingProfiles'] } } } ] }, true, false ] }, 'following': 1 } }
代码解释
$reduce会遍历$following数组中的每一个对象- 每次迭代时,用
$concatArrays把当前对象的followingProfiles数组和累加器($$value,初始为空数组)合并 - 最终得到一个包含所有关注ID的一维数组,
$in就能正确匹配$profile的值,返回预期的true
运行这段修正后的代码,你的结果里isFollowing就会显示为true啦~
内容的提问来源于stack exchange,提问作者Abdelrahman Shahda
相关产品推荐
相关产品推荐

