Как наиболее оптимально получить название страны, штата, города из разных коллекций - PullRequest
0 голосов
/ 19 марта 2020

У меня есть коллекция сотрудников с текущим полем адреса следующим образом:

{
  currentAddr:{
    line1:'abc',
    line2:'def',
    country: countryId,
    state: stateId,
    city: cityId,
  }
}

countryId, stateId, cityId представлен _id в коллекциях страны, штата, города соответственно. Каким будет оптимизированный конвейер для разрешения идентификатора страны, штата, города и их имен из соответствующих таблиц?

1 Ответ

0 голосов
/ 19 марта 2020

Обходного пути нет, кроме использования $ lookup

db.collection.aggregate([
    {
        $lookup: {
            from: "country",
            localField: "country",
            foreignField: "_id",
            as: "countries"
        }
    },
    {
        $lookup: {
            from: "state",
            localField: "state",
            foreignField: "_id",
            as: "states"
        }
    },
    {
        $lookup: {
            from: "city",
            localField: "city",
            foreignField: "_id",
            as: "cities"
        }
    },
    {
        $unwind: {
                path: "$countries",
                preserveNullAndEmptyArrays: true
            }
    },
    {
        $unwind: {
                path: "$states",
                preserveNullAndEmptyArrays: true
            }
    },
    {
        $unwind: {
                path: "$cities",
                preserveNullAndEmptyArrays: true
            }
    }
])
...