我有一个这样的不同条目的集合

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'
        }
    ]

]

最佳答案

使用聚合可获得所需的结果。在聚合管道中,$group运算符在创建所需结果中处于中心位置,因为您可以使用type键将集合中的文档分组到管道中。分组后,您可以使用累加器运算符之一$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);

关于javascript - 如何在mongodb中从不同的多个条件中查找,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35301073/

10-09 22:11