MongoDB如何按指定条件筛选并返回匹配的嵌套文档数据
MongoDB嵌套数组条件过滤查询方案
你可以通过MongoDB的**聚合管道(Aggregation Pipeline)**实现需求,具体查询语句如下:
db.collection.aggregate([ // 第一步:匹配根文档的过滤条件 { $match: { basic_column: "lorem ipsum" } }, // 第二步:过滤embededData数组中符合时间要求的元素 { $addFields: { embededData: { $filter: { input: "$embededData", as: "item", cond: { $and: [ // 时间大于2020年1月1日0点 { $gt: ["$$item.date", ISODate("2020-01-01T00:00:00Z")] }, // 时间小于2022年1月1日0点 { $lt: ["$$item.date", ISODate("2022-01-01T00:00:00Z")] } ] } } } } } ])
逻辑说明
$match阶段:先筛选出根文档中basic_column等于lorem ipsum的所有符合条件的文档,提前缩小查询范围提高执行效率。$addFields阶段:保留原有所有字段的同时,对embededData数组做重写,通过$filter操作符遍历数组的每一个元素,仅保留符合时间区间要求的元素。
如果你不需要保留根文档的其他字段,也可以把
$addFields替换为$project手动指定返回的字段列表,效果一致。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

