如何在Azure Portal对MongoDB集合筛选嵌套数组中SystemServerId等于指定值的文档
MongoDB集合筛选正确写法
基础筛选(仅筛选符合条件的文档,不对返回数组做裁剪)
直接在Azure Portal的查询筛选框中填入以下条件即可:
{ "Events.SystemTracer.UsersServers.SystemServerId": 125104 }
说明
- 该写法会匹配所有满足「任意
Events数组元素下的SystemTracer.UsersServers数组中存在SystemServerId等于125104」的文档,不需要调用聚合即可实现需求。 - 之前的写法错误原因:直接传入嵌套对象作为筛选条件时,MongoDB会执行严格全匹配,要求数组元素的结构、字段顺序、值都和你写的对象完全一致,不会做嵌套字段的匹配,因此无法命中结果。
进阶筛选(同时裁剪返回结果中的数组,仅保留符合条件的元素)
如果需要返回结果中只保留符合条件的Events元素,使用如下聚合管道:
[ { "$match": { "Events.SystemTracer.UsersServers.SystemServerId": 125104 } }, { "$addFields": { "Events": { "$filter": { "input": "$Events", "as": "event", "cond": { "$in": [ 125104, "$$event.SystemTracer.UsersServers.SystemServerId" ] } } } } } ]
说明
- 第一步
$match先筛选出所有符合条件的文档,减少后续计算量 - 第二步
$addFields对Events数组做过滤,只保留包含目标SystemServerId的元素
内容的提问来源于stack exchange,提问作者Carlos Rodrigues
相关产品推荐
相关产品推荐

