我有一个带有嵌套Document
(名称,值)集合的对象Properties
。
现在我想找到"Properties.Name" = "SomePropertyName"
不存在的文件。
我试过这个但是只有在属性存在但null
值为
{"Properties":{"$elemMatch":{"Name":"SomePropertyName", "Value.0":{"$exists":false}}}}
我尝试了一些野性$ne
和$exists
组合,这些组合应该可以在我的关系数据库查询体验中恢复,但它没有帮助。
文件示例:
[
{
"_id": "Document1",
"Properties": [
{
"Name": "SomeName",
"Value": [
"value1",
"value2"
]
},
{
"Name": "Property2",
"Value": [
"value3"
]
}
]
},
{
"_id": "Document2",
"Properties": [
{
"Name": "Property2",
"Value": [
"value3"
]
},
{
"Name": "Property3",
"Value": null
}
]
},
{
"_id": "Document3",
"Properties": [
{
"Name": "SomeName",
"Value": null
},
{
"Name": "Property2",
"Value": [
"value3"
]
},
{
"Name": "Property3",
"Value": null
}
]
}
]
查询应返回Document2
和Document3
(查询“SomeName”属性)
如何查询属性不存在或具有null
值的文档?
答案 0 :(得分:5)
我相信这是您想要的查询:
db.prop.find({$or: [
... {"Properties.Name":{$ne:"SomeName"}},
... {"Properties":{$elemMatch:{"Name":"SomeName","Value":null}}}
... ] })
这表示您希望所有未设置“SomeName”的文档(即没有存在的文档等于“SomeName”)以及Name为“SomeName”且同时为“Value”的所有文档是空的。
我在你的例子上试了一下,然后拿回了文件2和3。
答案 1 :(得分:1)
这应该可以解决问题
'Properties.Name' : { $exists : true, $ne: null }