我有一些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