MongoDB如何在单次查询中同时返回符合与不符合查询条件的结果
问题解答
该需求完全可以通过单次MongoDB查询实现,无需执行两次独立查询,核心使用聚合框架的$facet阶段即可实现。
实现原理
$facet聚合阶段支持在同一批输入文档上并行运行多个独立的子聚合管道,各个子管道的计算结果会最终合并到同一个输出文档中,刚好匹配你需要将符合/不符合条件的结果分组返回的需求。
可用查询语句
db.names.aggregate([ { $facet: { "$gt20": [ { $match: { age: { $gt: 20 } } } ], "NOT$gt20": [ { $match: { age: { $lte: 20 } } } ] } } ])
输出说明
执行上述查询后,返回的结果结构和你期望的完全一致:符合age>20的记录会被归入$gt20数组,其余记录归入NOT$gt20数组。
注意事项
如果你的集合数据量极大,需要注意MongoDB单个文档最大16MB的大小限制,若分组后数组总大小超过该限制需要额外调整查询逻辑,普通业务场景下无需担心该问题。
内容的提问来源于stack exchange,提问作者kg99
相关产品推荐
相关产品推荐

