根据您希望输出的内容,map reduce 绝对是最佳选择。这是一个简单的方法,它将获取您上面的文档,隔离唯一 ID,并计算每个 ID 的出现次数:
map = function() {
this.data.people.forEach(function(id){
emit(id, {count:1});
});
this.data.guys.forEach(function(id){
emit(id, {count:1});
});
};
reduce = function(key, values) {
var total = 0;
values.forEach(function(value) {
total += value.count;
});
return {count: total};
};
db.test.mapReduce(map, reduce, {out: 'result'});
如果您的数据集是:
{ "_id" : 1, "data" : { "people" : [ { "id" : "234323432" }, { "id" : "44213126" }, { "id" : "1321452" } ], "guys" : [ { "id" : "521452" }, { "id" : "92321452" } ] } }
{ "_id" : 2, "data" : { "people" : [ { "id" : "234323432" }, { "id" : "44213126" }, { "id" : "1321452" } ], "guys" : [ { "id" : "521452" }, { "id" : "92321452" } ] } }
{ "_id" : 3, "data" : { "people" : [ { "id" : "234323432" }, { "id" : "44213126" }, { "id" : "1321452" } ], "guys" : [ { "id" : "521452" }, { "id" : "92321452" } ] } }
跑步:
db.test.mapReduce(map, reduce, {out: 'result'});
将产生一个名为“result”的集合,其中包含以下内容:
{ "_id" : { "id" : "1321452" }, "value" : { "count" : 3 } }
{ "_id" : { "id" : "234323432" }, "value" : { "count" : 3 } }
{ "_id" : { "id" : "44213126" }, "value" : { "count" : 3 } }
{ "_id" : { "id" : "521452" }, "value" : { "count" : 3 } }
{ "_id" : { "id" : "92321452" }, "value" : { "count" : 3 } }
您可以根据您希望如何表示您的数据或您想用它做什么来塑造上述内容,但希望这对您有所帮助。