Где используется выходной параметр mapreduce? - PullRequest
0 голосов
/ 01 июня 2011

Это пример кода из этого урока:

http://kylebanker.com/blog/2009/12/mongodb-map-reduce-basics/

Он отмечает, что «начиная с MongoDB v1.8, вы должны указать имя выходной коллекции».Но я не понимаю, где это упоминается или зачем это нужно.

# Running map-reduce from Ruby (irb) assuming
# that @comments references the comments collection

# Specify the map and reduce functions in JavaScript, as strings
>> map    = "function() { emit(this.author, {votes: this.votes}); }"
>> reduce = "function(key, values) { " +
  "var sum = 0; " +
  "values.forEach(function(doc) { " +
  " sum += doc.votes; " +
  "}); " +
  "return {votes: sum}; " +
"};"

# Pass those to the map_reduce helper method
@results = @comments.map_reduce(map, reduce, :out => "mr_results")

# Since this method returns an instantiated results collection,
# we just have to query that collection and iterate over the cursor.
>> @results.find().to_a
=> [{"_id" => "hwaet",   "value"=>{"votes"=>21.0}}, 
    {"_id" => "kbanker", "value"=>{"votes"=>13.0}}
   ]

1 Ответ

1 голос
/ 02 июня 2011

Новые параметры вывода Map / Reduce задокументированы здесь .

Основная предпосылка заключается в том, что Map / Reduce первоначально просто выводил бы во временную коллекцию. Были проблемы с временной коллекцией (почему все это работает просто для того, чтобы она была временной?), И были добавлены некоторые функции, связанные со слиянием и повторным сокращением.

В частности, теперь вы можете запустить M / R, который эффективно обновляет то, что выводилось из предыдущего M / R. (подумайте об обновлении ежедневной статистики один раз в час и только обработке последнего часа).

Однако, если вам нужна только версия результатов в памяти, вы можете использовать встроенную опцию.

{out: { inline : 1}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...