Все примеры MongoDB MapReduce, которые я видел, касались подсчета / сложения чисел. Мне нужно объединить строки, и, похоже, MapReduce - лучший инструмент для работы. У меня есть большая коллекция MongoDB в этом формате:
{name: userone, type: typeone}
{name: usertwo, type: typetwo}
{name: userthree, type: typeone}
Каждое имя имеет только один тип, но имена не обязательно уникальны. Я хочу закончить коллекцией, в которой перечислены все имена для определенного типа, либо в списке через запятую, либо в массиве, например:
{type: typeone, names: userone, usertwo}
{type: typetwo, names: userthree}
Я пытался использовать MapReduce для достижения этой цели. Моя функция работает правильно, когда есть только один пользователь для типа. Однако, когда существует более одного пользователя, в поле имен хранится «undefined».
Я не очень хорош в Javascript, и я все еще изучаю MongoDB, так что это, вероятно, простая ошибка типа данных или области видимости.
Вот моя карта и функции сокращения. Что с ними не так?
map = function() {
emit(this.user,{type:this.type});
}
reduce = function(key, values) {
var all="";
for(var i in values) {
all+=values[i]['type']+",";
}
return all;
}