如何查询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
相关产品推荐
相关产品推荐

