Понимание заполнения в mongoose

#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 в качестве ссылки на ответ. Я думаю, вы могли бы сделать то же самое, если вам нужна точная производительность