2015-08-28 36 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