【问题标题】:Aggregate function in mongodbmongodb中的聚合函数
【发布时间】:2018-05-15 07:10:57
【问题描述】:

我有一个db数据如下

{
"_id" : ObjectId("5a2109572222085be93ef10d"),
"name" : "data1",
"date" : "2017-12-01T00:00.0Z",
"status" : "COMPLETED"},{
"_id" : ObjectId("5a2109572222085be93ef10d"),
"name" : "data1",
"date" : "2017-12-01T00:00.0Z",
"status" : "FAILED"}

我想要一个如下的聚合输出

{ 日期:“2017-12-01T00:00:0Z”,总计:“2”,完成:1,失败:1 }

我试过这段代码,但没有产生如上的结果

db.test.aggregate([
{$group: {_id : {date : '$date',status:'$status'}, total:{$sum :1}}},
{$project : {date : '$_id.date', status : '$_id.status', total : '$total', _id : 0}}
])

【问题讨论】:

  • 您可以添加您的 scnerio 以及您想要实现的目标吗?要更具描述性,请添加您想要实现的内容。你的数据集不符合你想要的输出我认为它会是{ date:"2017-12-01T00:00:0Z", total:"2", completed:2, failed:0 }
  • @himanshu 我改变了分贝数据
  • @Himanshusharma 我已更新代码,请检查

标签: node.js mongodb mongoose aggregate


【解决方案1】:
db.test.aggregate(

// Pipeline
[
    // Stage 1
    {
        $group: {
         _id:"$date",
         total:{$sum:1},
         failed:{$sum:{$cond:[{$eq:["$status","FAILED"]},1,0]}},
         completed:{$sum:{$cond:[{$eq:["$status","COMPLETED"]},1,0]}}
        }
    },

    // Stage 2
    {
        $project: {
            date : '$_id',
            total : 1,
            failed : 1,
            completed : 1,
            _id : 0,
        }
    },

]
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多