Задать вопрос
alekstar79
@alekstar79

Аггрегация из двух коллекций?

Ребята, помогите сформировать запрос. Имеются две коллекции со следующими структурами документов
db.xcover
{
    "_id" : ObjectId("5b101caddcab7850a4ba32eb"),
    "connections" : [
        169906699,
        125629607
    ],
    ...other-fields
}

db.dcover
{
    "_id" : 169906699,
    "changed" : true,
    "time" : false,
    ...other-fields
}

связь db.dcover._id in db.xcover.connections

И по сути мне требуется следующее, далее псевдокод запроса:
db.dcover.aggregate([
  {
    $match: {
        $or: [{ changed: true }, { time: true }]
    }
  },
  {
    $lookup: {
      from: 'xcover',
      localField: '_id',
      pipeline: [
        { $match: { $expr: { $in: ['$_id',  '$xcover.connections'] } } },
        { $unwind: '$xcover' }
      ],
       as: 'xcover'
     }
  }
])


Т.е. я хочу сделать выборку из dcover, где поле changed или time установленны в true и агрегировать с данными из xcover в массиве поля connections которого, имеются соответствующие идентификаторы документов dcover.
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
alekstar79
@alekstar79 Автор вопроса
вот решение:
db.dcover.aggregate([
     { $match: { $or: [{ changed: true },{ time: true }] } },
     {
         $lookup: {
              from: 'xcover',
              let: { group_id: '$_id' },
              pipeline: [
                 { $match: { $expr: { $in: [ '$$group_id', '$connections' ] }}}
              ],
              as: 'xcovers'
          }
     }
])
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы