首页 文章

Mongodb根据状态汇总博客文章

提问于
浏览
0

我有一个名为"blog"的集合,我希望根据3个状态计算每个用户博客,例如:已发布,待定和已批准 . 结果应该是这样的

[{
     "_id" : ObjectId('dshe1hhdsa12dashe21dqs'),
     "blogId" : 'dhsad78sa6dsa66ds6ds6ds8ds',
     "published" : 10,
     "approved" : 15,
     "pending" : 5
    },
    {
     "_id" : ObjectId('dshe1hhdsa12dashe21dqs'),
     "blogId" : 'dhsad78sa6dsa66ds6ds6ds8ds',
     "published" : 10,
     "approved" : 15,
     "pending" : 5
    }]

我想为此使用db.collection.aggregate() .

编辑:我试过这个

db.blog.aggregate([ 
    { $match: { status: { $in : ['Published', 'Approved', 'Pending']}}},
    { $project : { _id: 1, blogId: 1, status: 1} }]).pretty();

1 回答

  • 1

    好的,我得到了解决方案,我们走了 .

    var query = [
          { 
            $match: 
              { 
                status: { $in : ['Published', 'Approved', 'Pending']}
              }
          },
          {
            $group: {
              _id: { 
                blogId:"$blogId"
              }, 
              published: {
                $sum:{
                  $cond:[
                    {$eq:["$status","Published"]}, 
                    1, 
                    0
                  ]
                }
              }, 
              approved: {
                $sum: { 
                  $cond:[
                    {$eq:["$status","Approved"]}, 
                    1, 
                    0
                  ]
                }
              },
              pending: {
                $sum: { 
                  $cond:[
                    {$eq:["$status","Pending"]}, 
                    1, 
                    0
                  ]
                }
              }  
            } 
          },
          {
            $project: {
             _id: 0, 
             blogId: "$_id.blogId", 
             published: "$published", 
             approved: "$approved",
             pending: "$pending"
            }
          }
        ];
    
        db.blog.aggregate(query);
    

相关问题