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

MongoDB如何查询嵌套对象子属性数量大于0的文档?

解决MongoDB筛选嵌套对象属性数量大于0的问题

嘿,我明白你遇到的问题了——你想用$size来判断对象的属性数量,但它确实只对数组生效,所以之前的查询才会返回所有文档。下面给你两种可行的解决方案:

方法一:使用$expr + $objectToArray + $size(通用型)

这种方法适合需要明确判断对象属性数量的场景,通过$objectToArray把嵌套对象转换成键值对数组,再用$size获取数组长度,最后判断长度是否大于0:

db.collection.find({
  $expr: {
    $gt: [
      { $size: { $objectToArray: "$something.childThing" } },
      0
    ]
  }
})

原理说明:

  • $objectToArray会把something.childThing这个对象转成类似[{k: "type", v: "blah"}]的数组
  • $size计算这个数组的长度,空对象会被转成空数组,长度为0
  • $gt判断长度大于0,就能筛选出有属性的childThing文档

方法二:直接判断对象不等于空对象(简洁高效)

如果你的需求只是排除childThing为空对象的文档,直接用$ne(不等于)匹配空对象{}就可以了,写法更简单:

db.collection.find({
  "something.childThing": { $ne: {} }
})

这个方法的逻辑是:MongoDB中空对象{}和包含任意属性的对象是不相等的,所以这个查询会自动过滤掉childThing是空对象的文档,返回符合要求的结果。

两种方法在你的场景下都能正常工作,第二种更简洁高效,推荐优先使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:48:49