我有一些25k文件(原始json中有4 GB)的數據,我想對其執行一些JavaScript操作,以使其更容易訪問我的最終數據使用者(R
)和I想通過爲每個更改添加一個新的集合來對這些更改進行「版本控制」排序,但是我不知道如何在沒有reduce
的情況下如何執行map/reduce
。我想要一個一對一的文檔映射 - 我從collection_1
中的25,356個文檔開始,並且我想以collection_2
結束25,356個文檔。mongoDB map/reduce減去減少
我可以用這個本事:
var reducer = function(key, value_array) {
return {key: value_array[0]}
}
然後調用它像:
db.flat_1.mapReduce(mapper, reducer, {keeptemp: true, out: 'flat_2'})
(我的映射器只在呼叫發射一次,用一個字符串作爲第一個參數,最後文件作爲第二個。它是我真正想要的那些第二個參數的集合。)
但是這似乎很尷尬,我不知道它爲什麼它甚至可以工作,因爲我的emit
調用ar我的映射器中的聲明不等於我的reducer
的返回參數。另外,我最終得到一份文件,如
{
"_id": "0xWH4T3V3R",
"value": {
"key": {
"finally": ["here"],
"thisIsWhatIWanted": ["Yes!"]
}
}
}
這似乎是不必要的。
此外,執行其自己的插入的遊標甚至不是mapReduce
的十分之一。我不太瞭解MongoDB以便進行基準測試,但我估計它會比較慢。有沒有辦法平行運行遊標?我不在乎我的collection_2
中的文檔是否與collection_1
中的文檔不同。
它的工作原理的原因是因爲你的EMIT和減速機呼叫* *是相同的。既然你使用value [0]作爲你reducer的輸出,那麼它必須是完全相同的,因爲你沒有改變它(它只是通過你的reducer)。 – null 2010-08-30 23:47:53