В зависимости от того, что вы хотите, чтобы ваш вывод был, уменьшение карты, безусловно, путь. Вот простой пример, который возьмет ваши документы выше, выделит уникальные идентификаторы и посчитает их количество:
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 } }
Вы можете изложить вышеизложенное в том, как вы хотите представлять свои данные или что вы хотите с ними делать, но надеюсь, что это поможет вам на вашем пути.