请告诉我这里缺少的是什么:
这是我创建的文档:
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”地址而不是数组的第二个成员?
答案 0 :(得分:1)
您的查询与此文档匹配,并且您正在返回恰好是数组的“地址”字段。在2.0中,返回少于完整数组的唯一方法是通过$ slice运算符,但您需要知道所需元素的位置。
只返回一个与您的查询匹配的元素的方法是使用新的Aggregation Framework(在开发版2.1中可用,将随2.2发布)。
聚合框架将允许您“$ unwind”数组,以便您可以只返回与您的过滤器匹配的数组元素的文档。