mongodb: ссылка на массив результатов предыдущего конвейера в следующий конвейер - PullRequest
0 голосов
/ 27 апреля 2018

Я использую агрегатный конвейер.

 const pipeline = [
                    { $match: query } // first pipeline stage
 ]

это даст следующий результат:

{"_id": ObjectId ("512bc95fe835e68f199c8686"), "author": "dave", "оценка": 80, "просмотров": 100}

{"_id": ObjectId ("512bc962e835e68f199c8687"), "author": "dave", "score": 85, "views": 521}

Я хочу уменьшить этот результат конвейера (в данном случае это массив) в объект. Я знаю, мы можем сократить с проектом

Вторая очередь трубопровода:

{
  $project: {
   results: {
    $reduce: {
        input: <array>, // We have $$ROOT, but I need previous pipeline result
        initialValue: <expression>,
        in: <expression>
    }
   }
}

Как мы можем сослаться на предыдущий результат конвейера как массив на эту стадию конвейера?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы имеете в виду $group

db.collection.aggregate([
  { "$match": { ... } },  // your query conditions
  { "$group": { 
    "_id": "$author",
    "score": { "$sum": "$score" },
    "views": { "$sum": "$views" }
  }}
])

Это будет "группировать по" полю "author", помещенному в _id, и возвращать другие свойства, используя "аккумулятор", такой как $sum

{ "_id" : "dave", "score" : 165, "views" : 621 }

Для получения дополнительной информации я предлагаю ознакомиться с разделом Aggregation официальной документации, в котором приведены многие примеры, а также с таблицей сопоставления агрегирования SQL , если вы знакомы с SQL. Базы данных.

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