#database #mongodb #mongoose #nosql #schema
#База данных #mongodb #mongoose #nosql #схема
Вопрос:
У меня есть коллекции с именами Book и Author. Книга может быть написана несколькими авторами. Итак, коллекции выглядят так:
Book: {
id: objectId,
name: string,
price: number,
authors: [objectId]
}
Author: {
id: objectId,
nameL string
}
Поле автора коллекции книг представляет собой массив идентификаторов объектов автора.
Когда я захочу получить несколько книг и их авторов, я получу массив ObjectId автора. Затем для каждого элемента ObjectId я получу автора.
Другой способ сделать это — использовать «заполнить». Но я не знаю, похож ли этот способ на «join» в реляционной базе данных? Обладает ли он лучшей производительностью, чем первый способ?
Ответ №1:
Я предполагаю, что у вас будут какие-то данные о книгах каждого автора. Вместо использования populate
(потому populate
что в mongoose) я использую $lookup
в mongodb, и это больше похоже на объединение в реляционной базе данных. Вот документация
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#use-lookup-with-an-array
Комментарии:
1.
$lookup
Быстрее, чемpopulate
?2. Я не пытался сравнивать между ними, но я прочитал этот пост на medium в качестве ссылки на ответ. Я думаю, вы могли бы сделать то же самое, если вам нужна точная производительность