Mongoose: множественный запрос заполняется одним вызовом
В Mongoose я могу использовать запрос для заполнения дополнительных полей после запроса. Я также могу заполнить несколько путей, например
Person.find({}) .populate('books movie', 'title pages director') .exec()
Тем не менее, это приведет к поиску в книге сбора полей для названия, страниц и режиссера, а также поиск в фильме, собирающем поля для названия, страниц и режиссера. Я хочу получить титул и страницы только из книг, а режиссер из фильма. Я мог бы сделать что-то вроде этого:
Person.find({}) .populate('books', 'title pages') .populate('movie', 'director') .exec()
который дает мне ожидаемый результат и запросы.
- Заseleniumие Mongoose vs вложенность объекта
- Как я могу запросить различные значения в Mongoose?
- Невозможно перезаписать модель после компиляции Mongoose
- Как вернуть только вложенные документы массива из всех документов
- Mongoose удалить элемент массива в документе и сохранить
Но есть ли способ, чтобы поведение второго fragmentа использовалось с использованием синтаксиса «одиночной строки», такого как первый fragment? Причина этого заключается в том, что я хочу программно определить аргументы для функции заполнения и передать ее. Я не могу сделать это для нескольких вызовов заполнения.
- Mongoose: findOneAndUpdate не возвращает обновленный документ
- выборочная проверка mongoose с использованием 2 полей
- Mongoose.js instance.save () callback не срабатывает
- Почему мангуста всегда добавляет s в конец имени моей коллекции
- Что такое ошибка Mongoose Присвоение объекта ObjectId не удалось для значения XXX по пути «_id»?
- Загрузка изображений с использованием Node.js, Express и Mongoose
- mongoDB / mongoose: уникальный, если не null
- толкание объекта в схему массива в Mongoose
Изучив исходный код мангуста, я решил это с помощью:
var populateQuery = [{path:'books', select:'title pages'}, {path:'movie', select:'director'}]; Person.find({}) .populate(populateQuery) .execPopulate()
вы также можете сделать что-то вроде ниже:
{path:'user',select:['key1','key2']}
Вот как это делается на основе документации Mongoose JS http://mongoosejs.com/docs/populate.html
Допустим, у вас есть схема BookCollection, которая содержит пользователей и книги. Чтобы выполнить запрос и получить все BookCollections со связанными с ним пользователями и книгами, вы сделаете это
models.BookCollection .find({}) .populate('user') .populate('books') .lean() .exec(function (err, bookcollection) { if (err) return console.error(err); try { mongoose.connection.close(); res.render('viewbookcollection', { content: bookcollection}); } catch (e) { console.log("errror getting bookcollection"+e); }