我見過的所有MongoDB MapReduce示例都涉及到計數/添加數字。我需要組合字符串,它看起來像MapReduce是該作業的最佳工具。我有這種格式的大型MongoDB集合:Mongodb MapReduce連接字符串?
{name: userone, type: typeone}
{name: usertwo, type: typetwo}
{name: userthree, type: typeone}
每個名稱只有一種類型,但名稱不一定是唯一的。我想用一個集合列出所有的名字爲特定類型的結束了,無論是在一個逗號分隔的列表或數組,像這樣:
{type: typeone, names: userone, usertwo}
{type: typetwo, names: userthree}
我試圖用MapReduce的做到這一點。當一個類型只有一個用戶時,我的功能可以正常工作。但是,當有多個用戶時,'未定義'被存儲在名稱字段中。
我不是很擅長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;
}
這很好,現在我該如何修改該代碼,以便在數組中使用名稱而不是逗號分隔列表(如果需要,我可以在客戶端上構建逗號分隔列表)? 簡單地回報{「names」:all}; (0)=> Array( [0] => Array( [0] => Array( [0] => Array( [0]))在映射函數中工作,但得到了一堆醜陋的嵌套數組, => Array( [0] => Array( – 2010-06-04 21:14:11
啊......是的,我不確定你的意圖是什麼,所以我根據你的代碼猜到了,我會修改我的答案以包含一個數組示例。 – 2010-06-04 21:17:59