在MongoDB的子文档中查找具有特定值的文档

时间:2014-12-15 16:24:34

标签: mongodb find mongodb-query

在MongoDB中,假设我们有一个集合items,其中包含以下示例数据:

[
   {name: "A", locations: [{country: "USA"}, {country: "Germany"}]},
   {name: "B", locations: [{country: "USA"}],
   {name: "C", locations: [{country: "France"}, {country: "Germany"}]},
   {name: "D", locations: [{country: "Germany"}]},
   {name: "E", locations: [{country: "USA"}, {country: "UK"}]}
]
  1. 我们怎样才能获得name子文档中只有country: "Germany"的所有文档的locations字段?

    示例:使用上面的示例集items,然后执行上述查询应返回[{name: "D"}]

  2. 我们怎样才能获得name子文档中没有locationscountry: France(或两者)作为元素的所有文档的country: "Germany"字段?< / p>

    示例:使用上面的示例集items,然后执行上述查询应返回[{name: "B"}, {name: "E"}]

  3. 我已经阅读了文档,并尝试了很多东西,最后我用两个步骤来处理它。查询我提出的最具体的查询,然后通过以编程方式循环遍历文档(数组)来过滤不需要的文档。我想知道以前的查询是否可以通过单个查询直接实现。

    注意:文档/查询仅为示例,我处理的文档/查询不同。

1 个答案:

答案 0 :(得分:1)

  

我们怎样才能获得所有只有国家/地区的文件的名称字段:“德国”位于子文档?

$size运算符将派上用场:

db.foo.find({locations:{$size:1}, "locations.country":"Germany"})
  

我们怎样才能获得所有文件的名称字段,其中地点子文件没有国家:法国或国家:“德国”(或两者)作为元素?

$nin运算符将派上用场:

db.foo.find({"locations.country":{$nin:["Germany", "France"]}})