MongoDB не поддерживает традиционные SQL JOIN'ы нативно, так как это документоориентированная база данных, построенная на концепции самодостаточных документов, а не реляционных табличных структур.
$lookupОсновной способ выполнить join-подобные операции в MongoDB — использовать aggregation pipeline с $lookup. Это позволяет выполнить левый внешний join между двумя коллекциями.
db.orders.aggregate([
{
$lookup: {
from: "customers",
localField: "customerId",
foreignField: "_id",
as: "customerDetails"
}
}
])
Ключевые характеристики $lookup:
pipeline и let для дополнительной фильтрацииПредпочтительный подход в MongoDB — полностью избегать join'ов за счёт денормализации данных, то есть встраивания связанных данных прямо в документ.
| Подход | Лучше всего для |
|---|---|
$lookup | Иногда связанные данные, нормализованные схемы |
| Embedding | Часто используемые вместе данные, связи one-to-few |
MongoDB делает ставку на встраивание документов как идиоматическое решение для работы со связанными данными. $lookup существует как мощная альтернатива, но чрезмерное увлечение им может сигнализировать о том, что схема спроектирована без учёта документной модели MongoDB.
Стадия агрегации $lookup в MongoDB по умолчанию выполняет правое внешнее соединение, объединяя все документы из внешней коллекции в текущий конвейер независимо от условий совпадения.
Новый — ещё не проверен сообществом
Вы