Использование вложенных свойств в $ lookup - PullRequest
0 голосов
/ 14 февраля 2019

Давайте предположим, что у меня есть объект Person.Каждый человек имеет n количество домов, и в каждом доме есть m количество комнат.В каждой комнате есть специальный идентификатор предмета, и у меня также есть коллекция этих предметов.Итак, мой объект Person выглядит примерно так:

person: {
    name: "Fictional Name",
    houses: [
        {
            rooms: [
                {
                    itemId : "q23434c23"
                },{
                    itemId : "q34c356b5"
                },{...}
            ]
        },{...}
    ]
}

Теперь, когда я собираю свою коллекцию person , я пытаюсь $lookup собрать все эти itemId внутри нее и сохранить их.как переменная.Проблема в том, что я не знаю, как их искать.Я попробовал запустить приведенный ниже код, но он работает только для первого Дома:

db.persons.aggregate([
    {
       $lookup: {
           from: "items",
           localField: "houses.rooms.itemId",
           foreignField: "_id",
           as: "myItems"
       }
    },{
        $project: {
            name: 1,
            myItems: "$myItems"
        }
    }
])

Редактировать: вещь выглядит примерно так:

item: {
    _id: "q23434c23",
    type: "PLASTIC",
    description: "basic description"
}

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать ниже агрегации

db.persons.aggregate([
  { "$unwind": "$houses" }
  { "$lookup": {
    "from": "items",
    "localField": "houses.rooms.itemId",
    "foreignField": "_id",
    "as": "houses.rooms"
  }},
  { "$group": {
    "_id": "$_id",
    "houses": { "$push": "$houses" }
    "name": { "$first": "$name" }
  }}
])
...