使用Rails和Mongoid对作用域集合进行Map/Reduce



我正在尝试在Rails 3.1应用程序中使用MongoDB与Mongoid映射/减少范围。

结果看起来很奇怪,所以我想知道map_reduce是否可以应用于预压缩的集合,例如:

current_user.tasks.for_year_and_month(year, month).collection.map_reduce(map, reduce, :out => "res")

for_year_and_month作用域是给定月份的任务,但是来自map_reduce的结果似乎也包括其他任务。现在我想知道是否我的map/reduce函数是错误的,或者map/reduce不能应用于预作用域集合。

如果是这样,我必须在emit函数中完成所有作用域的工作,这将使事情变得更糟。我真不敢相信。

有谁能开导我一下吗?

的问候Felix

作用域被忽略,因为您正在直接处理集合。

你可以将:query选项传递给map_reduce,这将过滤文档。

,

Task.collection.map_reduce(map,reduce,out:{merge:'res'},query:{user_id: x, ...})

这就是你想要的:

results = Task.collection.map_reduce(map, reduce, {query: {month: month, year: year}, out: "reduced_task_results"})
filtered_results = results.find({})

您可以在查询选项中使用Mongoid的范围选择器:

scoped = current_user.tasks.whatever
Task.map_reduce( ..., :query => scoped.selector)

相关内容

  • 没有找到相关文章

最新更新