我有一个包含不同条目的集合
foods{
{
name: 'rice'
type: 'Brazilian'
},
{
name: 'meat'
type: 'Spanish'
}
,
{
name: 'Cake'
type: 'Brazilian'
}
如何选择获取每种食物的特定食物量 例如,它应该返回mongodb中每种类型的4种食物的集合(数组)
[
[
{
name: 'rice'
type: 'Brazilian'
},
{
name: 'meat'
type: 'Brazilian'
}
{
name: 'pizza'
type: 'Brazilian'
},
{
name: 'bread'
type: 'Brazilian'
}
],
[
{
name: 'beans'
type: 'spanish'
},
{
name: 'fish'
type: 'spanish'
}
{
name: 'chocolare'
type: 'spanish'
},
{
name: 'ham'
type: 'spanish'
}
]
]
答案 0 :(得分:1)
使用聚合来获得所需的结果。在聚合管道中, $group
运算符在创建所需结果方面占据中心位置,因为您可以通过类型键将集合中的文档分组到管道中。分组后,您可以使用其中一个累加器运算符 $push
来创建数组。如下所示:
var pipeline = [
{
"$group": {
"_id": "$type",
"docs": {
"$push": { "name": "$name", "type": "$type" }
}
}
}
]
var result = db.foods.aggregate(pipeline).map(function (doc){ return doc.docs });
printjson(result);