如何改变MongoDB的map-reduce结果的结构?



当我在Mongo数据库上运行Map-Reduce时,我通常会得到类似以下的结果:

{ _id: <some-id>, value: { <first-key>: <first-value>, ... } }

有没有办法省略value: { ... }部分,直接在结果中插入value的内容?基本上,我希望得到如下所示的结果:

{ _id: <some-id>, <first-key>: <first-value>, ... }

通过这种方式,我可以将结果合并回遵循此格式的现有集合。

我还有一个关于Map-Reduce的问题:是否有可能从mapreduce函数中访问另一个集合?

MapReduce只返回{_id:some_id, value:some_value}形式的文档

"some_value"不一定是嵌入式文档,但在大多数情况下,它允许Map Reduce函数计算多个变量。Reduce函数返回的文档必须与输入文档的格式相同,因为对于任意给定的_id值,Reduce函数可能会重复运行。

对于Map Reduce如何工作的一步一步,请参阅MongoDB食谱的"额外"部分标题为"查找最大和最小值与版本化文档"http://cookbook.mongodb.org/patterns/finding_max_and_min/这应该提供更好的理解Map Reduce是如何工作的,以及为什么输出必须以格式{_id:some_id, value:some_value}

可以进行增量Map Reduce,这将合并多个Map Reduce函数的结果。http://www.mongodb.org/display/DOCS/MapReduce MapReduce-IncrementalMapreduce

最后,目前不可能使用Map Reduce一次访问多个集合。此功能有一个特性请求,但计划不会添加到任何即将到来的版本中。https://jira.mongodb.org/browse/server - 970

RE:从Map/Reduce函数中访问其他集合。你所能做的就是利用"作用域"在执行过程中将m/r所需的数据推入。注意:scope在这里只接受一个简单的对象集合。简单是指没有嵌套文档。

scope = { People : [{ Name : 'bob', Color : 'blue'}, { Name : 'sally', Color: 'orange'}] }

上面的作用域集合工作正常。在m/r函数中,只需将'People'作为全局变量,您可以遍历您的集合等。

scope = { People : [{ Name : 'bob', Color : { Favorite : 'blue'} }, { Name : 'sally', Color : { Favorite : 'orange' } }] }

以上将不起作用,这取决于你正在使用的驱动程序,你会得到一个范围错误,并告诉最大调用大小已超过或类似的东西。

这对我很有效:
假设您在map中发射this或其变体,请首先设置this._id = undefined
设置出模式合并。

查看我的例子

相关内容

  • 没有找到相关文章

最新更新