У меня есть данные в MongoDB. Структура одного объекта, как это:MongoDB MapReduce, возврат только при подсчете> 1
{
"_id" : ObjectId("5395177980a6b1ccf916312c"),
"institutionId" : "831",
"currentObject" : {
"systemIdentifiers" : [
{
"value" : "24387",
"system" : "ABC"
}]
}
}
Я должен знать, сколько объектов есть же institutionId и systemIdentifiers [0] .value и хотите вернуть только те дублируется таким образом. Для этого я группирую их по этим идентификаторам и подсчетам.
Объект (пара идентификаторов) должен быть возвращен, когда отсчета больше 1.
Это фрагмент кода, который делает группировку с помощью MapReduce.
var map = function() {
var key = this.institutionId;
var val = this.currentObject.systemIdentifiers[0].value;
emit({"institutionId":key,"workId":val}, {count:1});
};
var reduce = function(key, values) {
var count = 0;
values.forEach(function(v) {
count += v['count'];
});
return {count: count};
}
db.name.mapReduce(map, reduce, {out: "grouped"})
db.grouped.find()
Чтобы получить только те, которые имеют счета greather, чем 1, я
db.grouped.aggregate([{$match:{"value.count":{$gt: 1}}}])
Пример результат затем следующий
{
"_id" : {
"institutionId" : "1004",
"workId" : "591426"
},
"value" : {
"count" : 2
}
}
Но мне любопытно ли, если это возможно, чтобы это было сделано просто сделав MapReduce в качестве одного оператора. Sth, как добавление финализатора или около того.
спасибо, это работает отлично :) –