Map / Reduce on Scoped коллекция с Rails и Mongoid - PullRequest
0 голосов
/ 22 октября 2011

Я пытаюсь отобразить / уменьшить область в приложении 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 / проводить или карты / редукции нельзя применять к предварительно определенным коллекциям.

Если это так, я должен был выполнить всю работу с областью действия в моей функции emit, что могло бы сделатьвсе еще хуже.Я не могу в это поверить.

Может ли кто-нибудь просветить меня?

С уважением, Феликс

Ответы [ 3 ]

0 голосов
/ 25 февраля 2012

Это то, что вы ищете:

results = Task.collection.map_reduce(map, reduce, {query: {month: month, year: year}, out: "reduced_task_results"})
filtered_results = results.find({})
0 голосов
/ 26 февраля 2013

Вы можете использовать селектор области действия из Mongoid в опции запроса:

scoped = current_user.tasks.whatever
Task.map_reduce( ..., :query => scoped.selector)
0 голосов
/ 28 января 2012

Область игнорируется, поскольку вы работаете непосредственно с коллекцией.

Вы можете передать опцию: query в map_reduce, и это отфильтрует документы.

Например:

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