2012-06-02 41 views
0

请告诉我,我在这里缺少:怎样才能返回数组中只有匹配成员

这是我创建的文档:

fatDoc = { 
name: "Babak", 
personID : 555, 
email : "[email protected]", 
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:如何将其更改为仅返回第一个文档是“主”地址而不是数组的第二个成员?

回答

1
  1. 您的查询与此文档匹配,您将收回恰好是数组的字段“地址”。在2.0中,返回小于整个数组的唯一方法是通过$ slice操作符,但您需要知道所需元素的位置。

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

Aggregation Framework将允许您“放开”数组,以便您可以取回与您的过滤器匹配的数组元素的文档。

+0

非常感谢Asya,书籍作者,工程师和MongoDB架构师都在这里,帮助我们进一步了解MongoDB。 – Bohn

相关问题