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

MongoDB聚合中基于items数组的条件匹配文档实现求助

MongoDB聚合管道匹配逻辑解决方案

直接用$match阶段结合$or操作符就能实现需求,不需要复杂的$cond,以下是具体代码(假设目标ID为4):

db.yourCollection.aggregate([
  {
    $match: {
      $or: [
        { items: { $exists: false } },
        { items: [] },
        { items: 4 }
      ]
    }
  }
])

逻辑拆解

  • { items: { $exists: false } }:匹配没有items字段的文档
  • { items: [] }:匹配items为空数组的文档
  • { items: 4 }:MongoDB原生支持数组匹配,此条件会自动匹配items数组中包含4的文档(等价于{ items: { $in: [4] } })

用$expr的等价写法

如果一定要用$expr(比如需要在聚合中引用变量或计算字段),可以这样写:

db.yourCollection.aggregate([
  {
    $match: {
      $expr: {
        $or: [
          { $not: { $exists: "$items" } },
          { $eq: ["$items", []] },
          { $in: [4, "$items"] }
        ]
      }
    }
  }
])

验证示例

  • 当文档items: [1,2,3]、目标ID=4:三个条件均不满足,不匹配
  • 当文档items: []、目标ID=4:第二个条件满足,匹配
  • 当文档items: [4,5]、目标ID=4:第三个条件满足,匹配
  • 当文档无items字段、目标ID=4:第一个条件满足,匹配

内容的提问来源于stack exchange,提问作者dzm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:47:16