Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在mongodb中从不同的多个条件中查找_Javascript_Json_Mongodb - Fatal编程技术网

Javascript 如何在mongodb中从不同的多个条件中查找

Javascript 如何在mongodb中从不同的多个条件中查找,javascript,json,mongodb,Javascript,Json,Mongodb,我有一个像这样的不同条目的集合 foods{ { name: 'rice' type: 'Brazilian' }, { name: 'meat' type: 'Spanish' } , { name: 'Cake' type: 'Brazilian' } 我如何选择一种食物来获取每种食物的特定数量 例如,它应该为mongodb中的每种类型返回一个包含4种食物的集合(数组) [ [ { name: 'rice'

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

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

]

使用聚合来获得所需的结果。在聚合管道中,操作符在创建所需结果时处于中心位置,因为您可以通过类型键将集合中的文档分组到管道中。分组后,可以使用累加器操作符之一创建数组。如下所示:

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);