如何在mongodb文档中迭代对象



我的mongo集合中的文档如下:

{
    "_id" : ObjectId("568f7e67676b4ddf133999e8"),
    "auth_dic" : {
        "2406" : [ 
            "44735"
        ],
        "6410" : [ 
            "223423"
        ]
        ...
        ...
    },
    "user_id" : "fdasd23423"
}

这是一个用户,在"auth_dic"中有许多类似"2406"6410"的id

我想使用mapreduce方法来统计有多少用户拥有"2406",有多少用户具有"6410",以及其他类型。我的映射器是:

mapper = Code('''
                function(){
                    this.auth_dic.forEach(function(app_id){
                        emit(app_id, 1);
                    });
                }
            ''')

我的减速器是:

reducer = Code('''
                function(key, values){
                    var total = 0;
                    for (var i = 0; i < values.length; i++) {
                        total += values[i];
                    }
                    return total;
                }
            ''')

但是映射器不能工作,因为函数"forEach"不能使用户迭代dic,我该怎么办才能解决这个问题?

运行以下MapReduce操作:

mr = db.runCommand({
    "mapreduce" : "collectionName",
    "map" : function() {
        var map = this.auth_dic;
        for (var key in map) { 
            if (map.hasOwnProperty(key)) { emit(key, 1); }
        }
    },
    "reduce" : function(key, val) { return Array.sum(val); }, 
    "out": "collectionName" + "_keys"
})

然后查询得到的集合,以便找到动态密钥的所有计数:

db[mr.result].find()

相关内容

  • 没有找到相关文章

最新更新