我需要找到一个文档,其中“组件”不存在或如果存在,则其 ID 为 1111 且 isActive 为真且“问题”不存在或其 ID 为 1111 且 isActive 为真。
示例:文档 1:////这包含“组件”但不包含“问题”
{..
"components" : [
{
"id" : "1111",
"name" : "component1",
"isActive" : true
}
],
}
文档 2://this 包含“问题”但不包含“组件”
{..
"issues" : [
{
"id" : "1111",
"name" : "issue 1",
"isActive" : true
}
],
..}
文件 3://这两个都没有
询问:
db.sample.find({
"issues":{$in:[null, {"$elemMatch" : {"id":"1111","isActive": {"$in":[true,null]}}}]},
"components":{$in:[null, {"$elemMatch" : {"id":"1111","isActive": {"$in":[true,null]}}}]}
})
但是我收到一个错误,“errmsg”:“不能在 $in 下嵌套 $”,
请帮助形成返回所有上述 3 个文档的查询。
你不需要$in
. 你需要$or
接线员。
尝试
db.sample.find({
$or:[
{"issues":{$exists:true,"$elemMatch" : {"id":"1111","isActive": true}}},
{"components":{$exists:true,"$elemMatch" : {"id":"1111","isActive": true}}}
]
})
基于 OP 的评论。这是工作版本。
db.Sample.find({
$or:[
{"issues":{$exists:true,"$elemMatch":{"id":"1111","isActive":true}},
"components":{$exists:false} },
{"components":{$exists:true,"$elemMatch":{"id":"1111","isActive":true}},
"issues":{$exists:false}},
{"issues":{$exists:true,"$elemMatch":{"id":"1111","isActive": true}},
"components":{$exists:true,"$elemMatch":{"id":"1111","isActive":true}}},
{"issues":{$exists:false}, "components":{$exists:false}}
]
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句