如何只返回数组的匹配成员

时间:2012-06-02 05:21:41

标签: mongodb

请告诉我这里缺少的是什么:

这是我创建的文档:

 fatDoc = {
 name: "Babak",
 personID : 555,
 email : "babak@babak.name",
 music : ["pink floyd", "muse", "garfunkel"],
 food : ["free food", "yummy food", "mom food"],
 addresses:
   [ { type: "home",
       street: "123 Main",
       state: "NY",
       city: "brooklyn"
    },
    { type: "vacation",
      street: "456 sunshine",
      state: "CA",
      city: "SanFran"
    }
  ]   
 }

这是我在其上运行的查询:

db.coolkids.find({"addresses.type" : "home"}, {addresses:1}).pretty()

问题1:为什么这个查询会导致返回两个地址? 问题2:如何将其更改为仅返回第一个doc,即“home”地址而不是数组的第二个成员?

1 个答案:

答案 0 :(得分:1)

  1. 您的查询与此文档匹配,并且您正在返回恰好是数组的“地址”字段。在2.0中,返回少于完整数组的唯一方法是通过$ slice运算符,但您需要知道所需元素的位置。

  2. 只返回一个与您的查询匹配的元素的方法是使用新的Aggregation Framework(在开发版2.1中可用,将随2.2发布)。

  3. 聚合框架将允许您“$ unwind”数组,以便您可以只返回与您的过滤器匹配的数组元素的文档。