MongoDB:查找子文档都不符合条件的文档

哈迪克·帕特尔

我想找出文件,其中Record A"FLD1""FLD1"不等于"VAL2",这意味着无论是哪里,也应该返回文件Record A不存在,或者要么FLD1来自不存在开FLD1不等于VAL2

在以下文档中,应返回Document 1, 3,并且4

  • 1:因为Record A存在,所以FLD1存在,但值ofFLD1存在VAL2
  • 3:因为Record A不存在
  • 4:因为Record A存在但FLD1不存在

只有2个Record A存在,FLD1存在且的值FLD1等于VAL2

{
    _id:NumberLong("1"),
    Name:"Doc1",
    Records: [ 
        {
            "RecordName" : "Record A",
            "State" : 1,
            "Properties" : {
                "FLD1" : "VAL1"
            }
        },
        {
            "RecordName" : "Record B",
            "State" : 1,
            "Properties" : {
                "FLD2" : "VAL3",
                "FLD3" : "VAL2"
            }
        }
    ]
},
{
    _id:NumberLong("2"),
    Name:"Doc2",
    Records: [ 
        {
            "RecordName" : "Record A",
            "State" : 1,
            "Properties" : {
                "FLD1" : "VAL2"
                "FLD4" : "VAL1"
                "FLD5" : "VAL6"
            }
        },
        {
            "RecordName" : "Record C",
            "State" : 1,
            "Properties" : {
                "FLD1" : "VAL1",
                "FLD2" : "VAL3"
            }
        }
    ]
},
{
    _id:NumberLong("3"),
    Name:"Doc3",
    Records: [ 
        {
            "RecordName" : "Record B",
            "State" : 0,
            "Properties" : {
                "FLD2" : "VAL2"
                "FLD3" : "VAL4"
                "FLD4" : "VAL5"
            }
        },
        {
            "RecordName" : "Record C",
            "State" : 1,
            "Properties" : {
                "FLD3" : "VAL2",
                "FLD5" : "VAL4"
            }
        }
    ]
},
{
    _id:NumberLong("4"),
    Name:"Doc4",
    Records: [ 
        {
            "RecordName" : "Record A",
            "State" : 1,
            "Properties" : {
                "FLD2" : "VAL2"
            }
        },
        {
            "RecordName" : "Record C",
            "State" : 1,
            "Properties" : {
                "FLD3" : "VAL3",
                "FLD4" : "VAL4"
            }
        }
    ]
}

有谁知道如何为mongo db写这样的查询吗?

另外,如果我要查找所有子文档中没有子文档具有“值”的记录名称的文档Record B,我将如何查找?

在这种情况下,查询应返回文档2和4。

米克尔

看起来您需要$ or运算符包含三个单独的过滤条件:

db.collection.find({
    $or: [
        { "Records": { $not : { $elemMatch: { "RecordName": "Record A" } } } },
        { "Records.Properties.FLD1": { $exists: false } },
        { "Records": { $not : { $elemMatch: { "Properties.FLD1": "VAL2" } } } }
    ]
})

$ elemMatch连同$不会允许你检查是否所有Records具有RecordName不等于Record A,那么你可以使用$存在检查FLD1和其他$elemMatch$not

蒙哥运动场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章