2015-08-28 51 views
1

我繼承了一個包含類似於下面的文檔的集合。我想查找所有的CreatedDate Value.Date(例如)「2014-11-29」和EquipmentCategory Value.Text。@ id是「M」的文檔。MongoDB根據數組中的屬性查找過濾

{ 
"_id" : ObjectId("55deebb1f7db2e09184e1126"), 
"ns0:Equipment" : { 
    "EquipmentNo" : "98031047", 
    "EquipmentDescription" : "Machine X", 
    "SerialNo" : "EX87GA", 
    "Attributes" : { 
     "Attribute" : [ 
      { 
       "Name" : "CreatedDate", 
       "Values" : { 
        "Value" : { 
         "Date" : "2014-11-29" 
        } 
       } 
      }, 
      { 
       "Name" : "CreatedBy", 
       "Values" : { 
        "Value" : { 
         "Text" : "MEE903070" 
        } 
       } 
      }, 
      { 
       "Name" : "EquipmentCategory", 
       "Values" : { 
        "Value" : { 
         "Text" : { 
          "@id" : "M", 
          "#text" : "Machines" 
         } 
        } 
       } 
      }, 
      ... 
     ] 
    } 
} 
} 

我正在尋找一個可以做到這一點的MongoDB shell或C#查詢。

回答

0

相同的數組元素中與多個字段匹配的查詢的關鍵是使用$elemMatch運算符。然後,因爲你需要在同一陣列內匹配兩個獨立的元素條件的組合,則需要使用$and將它們結合起來:

db.test.find({$and: [{ 
     'ns0:Equipment.Attributes.Attribute': { 
      $elemMatch: { 
       Name: 'CreatedDate', 
       'Values.Value.Date': '2014-11-29' 
      } 
     } 
    }, { 
     'ns0:Equipment.Attributes.Attribute': { 
      $elemMatch: { 
       Name: 'EquipmentCategory', 
       '[email protected]': 'M' 
      } 
     } 
    }] 
}) 
+0

謝謝,這正是我一直在尋找:) – swiftyd

+0

下一個問題,雖然是被有可能索引這個集合來使這個查詢有效嗎? – swiftyd

+0

@swiftyd很高興爲你工作,歡迎來到SO。關於你的下一個問題:是的,但是先做一些研究,然後回來發佈一個新問題,如果你仍然需要幫助。 – JohnnyHK