当前位置:Gxlcms > 数据库问题 > MongoDB学习笔记~管道中的分组实现group+distinct

MongoDB学习笔记~管道中的分组实现group+distinct

时间:2021-07-01 10:21:17 帮助过:2人阅读

多分组(group+distinct) db.M_User_Footprints.aggregate([ { $group: { _id: { UserInfoID: "$UserInfoID", ObjID: "$PlayVideo.ObjID" } } }, { $group: { _id: "$_id.UserInfoID", count: { $sum: 1 } } }, { $sort: { "_id": 1 } } ]);

注意,这里的第二个分组用的是第一个分组的_id,所以加上了$_id,这表示使用上面group的数据源来作为第二个分组的键。

而如果只是单个分组,就很容易实现了,也看一下代码

//单分组
db.M_User_Footprints.aggregate([
    { $group: { _id: "$UserInfoID", result: { $sum: 1 } } }
])

从上面两段代码我们可以看到,分组键必须用_id,分组的结果名称可以自己定义,{$sum:1}每次自加1。

下面使用map...reduce也可以实现分组的功能

db.runCommand({
    mapreduce: "M_User_Footprints",
    map: function Map() {
       emit(
        { "UserInfoID": this.UserInfoID, "ObjID": this.PlayVideo.ObjID }
        ,
         { count: 1 }
        );
    },
    reduce: function Reduce(key, values) {
        total = 0;//定义一个变量total , values是一个数组
        for (var i in values) {
            total += values[i].count
        }

        return { "count": total };
    },
    finalize: function Finalize(key, reduced) {
        return reduced;
    },
    out: { inline: 1 }
});

 

回到目录

MongoDB学习笔记~管道中的分组实现group+distinct

标签:

人气教程排行