在 mongoDB 中使用 $elemMatch 查询 $in

加亚特里

我需要找到一个文档,其中“组件”不存在或如果存在,则其 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 个文档的查询。

s7vr

你不需要$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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章