MongoDB中find查询如何不使用聚合仅返回数组内符合条件的元素
MongoDB查询仅返回数组中匹配条件的元素(非聚合方案)
首先明确结论:存在不需要调用聚合框架的实现方法,可根据你使用的MongoDB版本选择对应方案:
方案1:MongoDB 4.4及以上版本(推荐)
4.4及后续版本的find()方法支持在投影参数中直接使用聚合表达式,你可以直接用$filter实现数组元素过滤,语法非常简洁:
db.test.find( // 匹配条件:仅筛选arr存在大于5元素的文档 { "arr": { $gt: 5 } }, // 投影规则:过滤arr只保留大于5的元素 { name: 1, arr: { $filter: { input: "$arr", cond: { $gt: [ "$$this", 5 ] } } } } )
执行后即可得到你预期的输出结果,不需要走聚合管道。
方案2:低版本MongoDB可选方案
如果使用的是4.4以下的MongoDB版本,有两种可选的非聚合实现:
- 如果只需要返回第一个匹配条件的数组元素,可以用
$elemMatch投影:
注意:该方案只能返回数组中第一个大于5的元素,无法返回所有匹配项,不符合当前需求,仅适用于只需要单条匹配元素的场景db.test.find( { "arr": { $gt: 5 } }, { name: 1, arr: { $elemMatch: { $gt: 5 } } } ) - 如果需要返回所有匹配元素,只能在应用层做过滤:先通过普通find查询拿到完整文档,再在业务代码中遍历过滤
arr数组,仅保留大于5的元素即可。
内容的提问来源于stack exchange,提问作者Gratis Devs
相关产品推荐
相关产品推荐

