Получить все объекты для каждого тега
Я новичок в mongodbs mapreduce и наверняка пока не совсем понял это. И у меня есть проблема, которую я пытаюсь решить в течение нескольких дней без успеха.
У меня есть коллекция, скажем, постов с полем тегов. Теперь я хочу отобразить новую коллекцию тегов. Где у каждого тега есть массив всех идентификаторов сообщений, которым назначен этот конкретный тег.
одна из моих попыток сделать это (которая не делает это правильно)
m = function() {
for (var i in this.tags) {
emit(this.tags[i], {"ids" : [this._id]});
};
}
r = function(key, emits) {
var total = {ids : []}
for (var i in emits) {
emits[i].ids.forEach(function(id) {
total.ids.push(id);
}
}
return total;
};
Я знаю, что мне нужно немного повернуть дату, но я просто не могу обернуться вокруг нее.
1 ответ
Решение
Я думаю, что вам не хватает ")" в вашей функции приведения в порядок, чтобы закрыть emits[i].ids.forEach(). Это то, что вы пытаетесь сделать?
r = function (key, values) {
var total = {ids:[]};
for (var i in values) {
values[i].ids.forEach(
function (id){
total.ids.push(id);
}
);
}
return total;
}
вход
{_id:2, tags: ["dog", "Jenna"]}
{_id:1, tags: ["cat", "Jenna"]}
результат:
{"results" : [
{"_id" : "Jenna",
"value" : {"ids" : [2,1]}
},
{"_id" : "cat",
"value" : {"ids" : [1]}
},
{"_id" : "dog",
"value" : {"ids" : [2]}
}
],
"timeMillis" : 1,
"counts" : {
"input" : 2,
"emit" : 4,
"reduce" : 1,
"output" : 3
},
"ok" : 1,
}