如何编写MongoDB查询条件筛选有效房屋数大于0的文档并过滤无效条目
实现方案
你可以直接使用MongoDB自带的$filter运算符完成需求,全程不需要用到unwind、group这类会拆分数组、占用大量内存的操作,几万条数据量级下完全不会触发内存超限问题。
对应查询语句
db.collection_name.find( // 查询条件:筛选有效房屋数量>0的文档 { $expr: { $gt: [ { $size: { $filter: { input: "$home", cond: { $ne: ["$$this.deleted", true] } } } }, 0 ] } }, // 结果投影:仅保留home数组中的有效房屋条目 { _id: 1, home: { $filter: { input: "$home", cond: { $ne: ["$$this.deleted", true] } } } } )
逻辑说明
- 所有运算都是单文档级别执行,不需要跨文档聚合,内存占用极低,执行效率很高。
$filter的判断条件$ne: ["$$this.deleted", true]正好匹配你的规则:deleted字段为空、或者不存在该字段的房屋都判定为有效,只排除deleted显式等于true的条目。- 如果查询频率较高,你可以给
home.deleted字段加索引进一步提升查询速度。
内容的提问来源于stack exchange,提问作者Arien Liu
相关产品推荐
相关产品推荐

