You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:27:33