Здравствуйте, использую mongodb + встроенную реализацию mapreduce.
Данные выглядят таким образом:
{ obj: integer, likes: integer}, ...
Мне нужно получить по 2 документа на каждый уникальный тип
obj с максимальным количеством
likes.
Допустим есть такие данные:
1=>124, 1=>20, 1=>70, 1=>150,
3 => 500, 3=>499, 3=>0
В результате мне нужно получить:
1=>150, 1=>124,
3=>500, 3=>499
Вот так выглядит map-функция:
mapFunc = Code('function() {
emit(this.gid, { likes: this.likes, obj : this._id });
}')
И reduce:
reduceFunc = Code('function(key, values) {
var likesCount = -1;
var selectedId = -1;
values.forEach(function(value) {
if (value["likes"] > likesCount)
{
likesCount = value["likes"];
selectedId = value["obj"];
}
});
return {likes: likesCount, obj: selectedId};
}')
По сути, этот пример вернет мне то, что нужно, но по 1 записи на уникальный
obj, этого можно было бы добиться и обычным aggregation framework'ом.
Никак не могу понять, как в таком подходе взять 2 последние записи с максимальным количеством
likes.