如何通过MongoDB查询指定文档数组中符合条件的元素?
无需循环实现MongoDB文档查询与数组筛选
完全可以通过MongoDB查询语句直接实现你的需求,不需要手动循环处理数组。以下是两种常用方案:
方案一:find查询结合投影筛选
适合仅需返回目标文档并过滤tickets数组的场景,直接在投影阶段使用$filter操作符:
db.collection.find( { title: "some movie" }, { title: 1, tickets: { $filter: { input: "$tickets", cond: { $eq: ["$$this.isSold", true] } } } } )
- 第一个参数
{ title: "some movie" }用于匹配目标文档 - 第二个参数通过投影规则,保留
title字段,并使用$filter筛选tickets数组中isSold为true的元素
方案二:聚合管道实现
如果需要更复杂的后续数据处理,推荐使用聚合管道:
db.collection.aggregate([ { $match: { title: "some movie" } }, { $addFields: { tickets: { $filter: { input: "$tickets", cond: { $eq: ["$$this.isSold", true] } } } } } ])
- 第一步
$match精准定位到title匹配的文档 - 第二步
$addFields替换原tickets字段为筛选后的结果,保留文档其他原有字段(如果需要)
两种方案均由MongoDB引擎内部处理数组筛选逻辑,无需编写额外循环代码。
内容的提问来源于stack exchange,提问作者darkshadowtrail
相关产品推荐
相关产品推荐

