我想找出文件,其中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] 删除。
我来说两句