MongoDB查询:如何筛选指定字段值非空对象的文档
解决方案
方法1:直接匹配非空对象(最简写法)
直接使用$ne运算符排除空对象即可,如果需要同时保证object1字段一定存在,可以额外加上$exists判断:
// 仅过滤object1为空对象的文档,无object1字段的文档也会被返回 db.collection.find({ "object1": { $ne: {} } }) // 同时要求object1字段存在,且不为空对象 db.collection.find({ "object1": { $exists: true, $ne: {} } })
方法2:通过判断对象键数量实现(兼容性更强)
如果需要更灵活的对象内容判断逻辑,可以用$expr结合$objectToArray、$size计算对象的键数量,只要键数大于0就说明不是空对象:
db.collection.find({ $expr: { $gt: [ { $size: { $objectToArray: "$object1" } }, 0 ] } })
补充说明
- 两种方法都可以精准过滤掉
object1为{}的文档,仅返回类似doc2的符合要求的结果 - 如果需要筛选嵌套字段的非空判断,只需要把字段路径对应修改即可,比如要判断
object1.object2不为空,把字段名替换为object1.object2即可
内容的提问来源于stack exchange,提问作者Adri
相关产品推荐
相关产品推荐

