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

如何查询MongoDB中嵌套数组长度大于1的文档集合?

解决MongoDB嵌套数组长度查询问题

嘿,我来帮你搞定这个查询需求!针对你要找array1里至少有一个子文档的array2长度大于1的文档,这里有两种简洁的实现方式:

方式一:用$elemMatch精准匹配嵌套元素

这是最直观的写法,专门用来匹配数组中至少一个符合条件的子元素:

db.yourCollection.find({
  array1: {
    $elemMatch: {
      $expr: { $gt: [ { $size: "$array2" }, 1 ] }
    }
  }
})
  • $elemMatch:确保array1数组里存在至少一个满足后续条件的子文档
  • $expr:允许我们在查询条件里使用聚合表达式(这里用来获取array2的长度)
  • $size:计算array2数组的元素个数,$gt判断这个数值是否大于1

方式二:用聚合表达式过滤判断

如果你需要更灵活的逻辑(比如统计符合条件的子元素数量),可以用$filter配合$size:

db.yourCollection.find({
  $expr: {
    $gt: [
      { $size: { 
          $filter: {
            input: "$array1",
            cond: { $gt: [ { $size: "$$this.array2" }, 1 ] }
          } 
        } },
      0
    ]
  }
})
  • $filter:遍历array1,筛选出array2长度大于1的子元素
  • $size:统计筛选后的子元素数量,只要数量大于0,就说明文档符合要求

额外情况:如果要求所有array1子元素的array2都大于1

要是你的需求是每个array1里的array2长度都得大于1,可以用下面的写法:

db.yourCollection.find({
  $expr: {
    $allElementsTrue: {
      $map: {
        input: "$array1",
        in: { $gt: [ { $size: "$$this.array2" }, 1 ] }
      }
    }
  }
})
  • $map:把array1的每个子元素转换成一个布尔值(array2长度是否大于1)
  • $allElementsTrue:检查所有布尔值是否都是true,只有全满足才会匹配文档

记得把代码里的yourCollection替换成你实际的集合名称哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:19:04