Карта / уменьшить и отсортировать вложенный документ - PullRequest
0 голосов
/ 10 марта 2012

У меня есть вопрос по поводу Map / Reduce Sort inner Document в mongodb. Схема выглядит следующим образом:

{
    "_id" : 16,
    "days" : {
      "1" : 123,
      "2" : 129,
      "3" : 140,
      "4" : 56,
      "5" : 57,
      "6" : 69,
      "7" : 80
}

Итак, мой вопрос сейчас таков: Как я могу достичь, чтобы суммировать некоторые конкретные дни из приведенных выше данных. Для примера:

Я хочу суммировать значения дня 1,3 и 7 и получить из этого результат. Я попробовал решение из Агрегация MapReduce на основе атрибутов, содержащихся вне документа , но не имела успеха.

Кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 10 марта 2012

MapReduce - это операция, которая перебирает кучу документов и выполняет операцию. Я не совсем уверен, что это именно то, что вы хотите, но, возможно, вы публикуете более простую форму вашей реальной проблемы. В любом случае следующий код работает, выпуская 3 раза для вашего отдельного документа, используя _id документа в качестве ключа для функции сокращения.

doc = {_id : 16, days : { 1 : 123, 2 : 129, 3 : 140, 4 : 56, 5 : 57, 6 : 69, 7 : 80 }};
db.so.insert(doc);

map = function() {
  emit(this._id, this.days["1"]);
  emit(this._id, this.days["3"]); 
  emit(this._id, this.days["7"]); 
}

reduce = function (k, vals) {
  var sum = 0;
  vals.forEach(function (v) {sum += v;});
  return sum;
}

res = db.so.mapReduce(map, reduce, {out : {inline : 1}});
res.find();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...