在给定排序查询的情况下,是否可以在mapReduce期间引用相对对象,甚至可以使用find($ where)?
e.g。给定
[
{ 'name' : 'bill',
'age' : 20 }
,
{ 'name' : 'bill',
'age' : 25 }
]
find({$where: 'this.age > previousItem.age'})
将返回:
{ 'name' : 'bill',
'age' : 25 }
答案 0 :(得分:0)
您无法访问map-reduce上下文中的光标,因此您无法“记住”上一个文档的内容。在map-reduce中,会单独处理每个文档。
原因是map-reduce可以在多个分片上并行运行,从而提高性能。将来,还可以支持多线程映射减少作业。在这些情况下,没有真正的“前一项”,因为您同时处理集合的多个部分。它可以是当前线程中的上一项,当前分片上的上一项或所有分片中的上一项。
关于您的示例,如果您已在age
上对查询进行了排序,则所有以前处理过的文档的年龄都小于或等于当前项目的年龄。所有未处理的项目的年龄将大于或等于当前项目的年龄。您可以使用find()
来检索这些项目,但我不建议这样做,因为它可能会影响性能。此外,您只能访问当前项,而不能访问您在示例中尝试执行的上一项。
我认为你误解了map-reduce的概念。 你想要实现的目标是什么?