Mongodb聚合做sum和addtoSet工作

时间:2016-04-21 10:37:52

标签: mongodb aggregation-framework

我有这样的文件:

int test1 = 123456;
string test2 = test1.ToString("N0");

每个用户都有多条记录属于不同的时间。 我的工作是找出前100位用户,它具有最大金额和特定时间范围内的类别大小。

所以我必须{"_id":"xxx","user_id":111,"time":14142342234,"amount":1000,"category":["A","B","C"]} {"_id":"xxx","user_id":111,"time":14142342234,"amount":1000,"category":["B","C"]} {"_id":"xxx","user_id":222,"time":14142342234,"amount":1000,"category":["A","B","C"]} $groupuser_id金额,但是,如何为每个用户设置类别?如果我想按类别大小排序?

1 个答案:

答案 0 :(得分:0)

有趣的学习练习。我已经制作了你可以在下面找到的聚合管道。它是3个阶段的复合物:

  1. $ match :确定时间间隔
  2. $ group :汇总金额字段类别类别列表大小
  3. $ sort :按生成的字段排序 total_amount categories_size
  4. 我希望它有所帮助:

    db.col.aggregate([
               {  
       $match:{  
          $and:[  
             {  
                'time':{  
                   $gt:14142342233
                }
             },
             {  
                'time':{  
                   $lt:14142342235
                }
             }
          ]
       }
    },
    {  
       $group:{  
          _id:'$user_id',
          total_amount:{  
             $sum:'$amount'
          },
          categories:{
            $addToSet:'$category'
          },
          categories_size:{  
             $sum:{  
                $size:'$category'
             }
          }
       }
    },
    {  
       $sort:{  
          total_ammount:1,
          categories_size:1
       }
    }])
    

    另外一个建议是:如果你将来要使用MongoDB,这种练习对MongoDB的日常任务非常有用,所以尽量找到课程甚至这个网站等资源继续练习。

    此致