如果我有一个集合,如下所示:MongoDB的聚集投影
db.cafe.insert({name: "Cafe1", customers: [{name: "David", foods: [{name : "cheese"}, {name: "beef"}]}, {name: "Bill", foods: [{name: "fish"}]} ]})
db.cafe.find().pretty()
{
"_id" : ObjectId("54f5ae58baed23b7a34fccb6"),
"name" : "Cafe1",
"customers" : [
{
"name" : "David",
"foods" : [
{
"name" : "cheese"
},
{
"name" : "beef"
}
]
},
{
"name" : "Bill",
"foods" : [
{
"name" : "fish"
}
]
}
]
}
我如何可以提取只包含人称为“万人迷”的食物对象的数组。 所需的输出仅仅是食物的阵列,即:
[{name: "cheese"}, {name: "beef"}]
我试图聚集流水线解开网吧客户,然后在名称匹配,那么项目的食品,如:
db.cafe.aggregate([{$unwind : "$customers"}, {$match : {"customers.name": "David"}}, {$project : {"customers.foods": 1, _id : 0}
}]).pretty()
{
"customers" : {
"foods" : [
{
"name" : "cheese"
},
{
"name" : "beef"
}
]
}
}
这似乎接近理想的结果,但是,我留下的问题是,我想要的食物被称为属性customers.foods下的数组。我想直接得到的结果是:
[
{
"name" : "cheese"
},
{
"name" : "beef"
}
]
有没有一种方法可以实现所需的输出?
我认为你应该改变你的项目如下 '{“$ project”:{“_ id”:0,“food”:“$ customers.foods”}}' – Yogesh 2015-03-03 13:12:24