2012-06-09 143 views
2

我有一個對象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 
     } 
    ] 
    } 
] 

查詢應返回Document2Document3(查詢反對「SomeName」屬性)

如何查詢哪裏屬性不存在或有null價值的文件?

+0

您可以包含示例文檔嗎? –

回答

5

我相信這是查詢你想要的:

db.prop.find({$or: [ 
... {"Properties.Name":{$ne:"SomeName"}}, 
... {"Properties":{$elemMatch:{"Name":"SomeName","Value":null}}} 
... ] }) 

這是說你想去的地方「SomeName」未設置(即無存在的那些都相等「SomeName」)的所有文件和名稱爲「SomeName」並且同時「值」的所有文檔都爲空。

我在你的例子中試過了,得到了文檔2和3。

相關問題