$ lookup с вложенными документами

Rune Aspvik спросил: 03 ноября 2018 в 09:35 в: arrays

У меня есть три коллекции, к которым нужно присоединиться / выполнить поиск."Группы""Пользователи""LinkedTags""Фотографии"

Я получаю все группы из групп коллекций.

group {
    id: 1,
    start: 10.12,
    linkedUsers : [1,2,3,4,5]
}

Затем мне нужно искать / присоединяться от пользователей

user {
    id: 1,
    name: ""
}

Затем из связанных тегов

tag {
    userId: 1,
    rounds: 3,
    time: 180
}

Затем из"photos"

photo {
    userId: 1,
    location: ""
}

Так что мне нужно, чтобы это было:

Group {
    id: 1,
    start: 10.12,
    linkedUsers: [1,2,3,4],
    users: [
        1:{
            id: 1,
            name: "",
            rounds: 3,
            time: 180,
            photos: [
                1: {
                    id: 1,
                    location: ""
                }
            ]
        }
    ]
}

Это то, что я пробовал до сих пор. Я думаю, что мне нужно сделать это поэтапно, но я не понял, как это сделать.

  db('groups').aggregate([
    {
      $lookup: {
        from: 'users',
        localField: 'linkedUsers',
        foreignField: 'id',
        as: 'users'
      }
    },
    {
      $unwind: "$users"
    },
    {
      $lookup: {
        from: 'photos',
        localField: 'linkedUsers',
        foreignField: 'id',
        as: 'photos'
      }
    },
    {
      $unwind: "$photos"
    },
    {
      $lookup: {
        from: 'linkedTags',
        localField: 'linkedUsers',
        foreignField: 'id',
        as: 'tags'
      }
    },
    {
      $unwind: "$tags"
    },
    { $group: {
        _id: null,
        id: "$id",
        start: '$start',
        linkedUsers: "$linkedUsers",
        users: {$push: {
          id: "$users.id",
          name: "$users.name",
          rounds: "$tags.rounds",
          time: "$tags.time",
          photos: {$push: {
            id: "$photos.id",
            location: "photos.location"
          }}
        }}
    }}
  ])

РЕДАКТИРОВАТЬ 1: Это первый ошибка, с которой я сталкиваюсь:

MongoError: поле 'id' должно быть объектом-накопителем

Я прочитал об этом, но я не понимаю, как все это сочетается.

Редактировать 2: Я исправил это, поместив группировку в _id: {}

Теперь я сталкиваюсь с нераспознанным выражением '$ push'

Изменить 3: Запуск в Atlas, 4.0.4 Enterprise.


0 ответов