MongoDB如何查询嵌套对象数组中符合多条件的指定字段值
MongoDB查询数组匹配元素指定字段方案
你所使用的查询条件{ link: "AAA", "media.src": "Test2"}本身可以正确匹配到包含符合要求元素的文档,但是MongoDB默认返回结果会保留完整的media数组,不会过滤数组内不匹配的元素,因此无法直接获取到目标update_utc_ts值,可通过以下两种方案实现需求:
方案1:使用投影$elemMatch(适合单匹配场景)
如果只需要获取第一个匹配src=Test2的媒体元素的对应值,可以直接在find查询的投影参数中使用$elemMatch过滤数组:
db.your_collection_name.find( // 查询条件 { link: "AAA" }, // 投影配置,只返回匹配的media元素的update_utc_ts { _id: 0, media: { $elemMatch: { src: "Test2" } }, "media.update_utc_ts": 1 } )
返回结果示例:
{ "media" : [ { "update_utc_ts" : "2021-11-04 23:23:30.315" } ] }
注意:该方案只会返回数组中第一个匹配条件的元素,若存在多个匹配元素需要全部返回,请使用方案2
方案2:使用聚合管道(适合多匹配/复杂处理场景)
通过聚合管道的展开、二次过滤步骤,可以返回所有匹配元素的对应字段值:
db.your_collection_name.aggregate([ // 第一步:过滤出link为AAA的文档,缩小处理范围 { $match: { link: "AAA" } }, // 第二步:展开media数组,每个数组成员拆分为独立文档 { $unwind: "$media" }, // 第三步:过滤出src为Test2的media条目 { $match: { "media.src": "Test2" } }, // 第四步:自定义返回字段,只保留目标时间值 { $project: { _id: 0, target_update_utc_ts: "$media.update_utc_ts" }} ])
返回结果示例:
{ "target_update_utc_ts" : "2021-11-04 23:23:30.315" }
内容的提问来源于stack exchange,提问作者user3925023
相关产品推荐
相关产品推荐

