首页 > 解决方案 > mongodb聚合中的多个参数

问题描述

我试图在我的 mongodb 中获取多个参数,我的代码在这里获取日期的不同值并对其进行计数,但是我如何添加另一个参数来获取例如另一组不同的和计数。

例子:

这是我的代码的输出:

[ { _id: '05-09-2019', count3: 1 },
  { _id: '06-09-2019', count3: 1 },
  { _id: '06-21-2019', count3: 1 },
  { _id: '06-30-2019', count3: 5 },]

我怎样才能做到这一点:

[ { _id: '05-09-2019', count: 1,  branch: America, count2: 1},
  { _id: '06-09-2019', count: 1,  branch: Germany,count2: 1},
  { _id: '06-21-2019', count: 1,  branch: Philippines,count2: 1},
  { _id: '06-30-2019', count: 5 , branch: Vietnam,count2: 1},]

这是我在计算日期时获取不同值的代码:

router.get('/blooddonationarea', function(req, res) {
        Blooddonation.aggregate([{$group: {_id : "$date" , count :{$sum:1}}},{$sort: {_id: 1}}],function(err, date) {     
        res.json({ success: true, date: date });
        //console.log(date);
        });  

    });

我尝试在 [] 子句之后插入它,但它根本没有得到值

[{ $match: { branch: { $eq: 'Rizal' } } },{$group: {_id : "$date" , count2 :{$sum:1}}},{$sort: {_id: 1}}]

这是示例文档:

_id:5c1f47dd59cdd931f4ce98ae
blood_product_donated:"Whole Blood"
branch:"Rizal"
deferral_type:"permanent"
date:"10-22-2019"

标签: angularjsnode.jsmongodbmean-stack

解决方案


您可以从按日期键和分支键对文档进行分组开始,然后是进一步的管道步骤,您仅按上一个管道中文档上的日期键进行分组。遵循此示例将为您提供所需的结果:

router.get('/blooddonationarea', (req, res) => {
    Blooddonation.aggregate([
        { '$group': {
            '_id': { 'date': '$date', 'branch': '$branch' },
            'count': { '$sum': 1 }
        } },
        { '$group': {
            '_id': '$_id.date',
            'count': { '$sum': '$count' },
            'branch': { '$first': '$_id.branch' },
            'count2': { '$first': '$count' } 
        } },
        { '$sort': { '_id': 1 } }
    ], (err, date) => {
        console.log(date);
        if (err) throw err
        res.json({ success: true, date });
    });
});

推荐阅读