AFAIK нет способа автоматически заполнить все ссылки на другую модель из коробки (есть плагины, хотя). Аналогично тому, как @ gustavohenke отвечает, вы можете использовать статичность, а также небольшое изменение вашего запроса на поиск.
Вот что я хотел бы сделать:
citySchema.statics.fieldsToPopulate = function() {
return ['regionField', 'countryField'];
};
Где regionField
и countryField
являются поля, которые ссылаются на эти модели Region
и Country
соответственно.
Тогда в запросе можно заполнить соответствующим образом:
var populate = city.fieldsToPopulate ? city.fieldsToPopulate() : [];
city.findById(id)
.populate(populate)
.exec(function(err, data) {
if (err) {
return next(err);
} else {
res.render('template', { city: data });
}
});
Это определенно интересный способ сделать это и работает на верхнем уровне находит, мне очень интересно, если есть способ, который будет работать для вложенных ссылок выборки. Например, у меня также есть модель под названием «Бизнес», которая имеет поле адреса и ссылку на «Город». Мне также хотелось бы, чтобы, когда бизнес был выбран, он автоматически заполняет город, что, в свою очередь, автоматически заполнит регион и страну, как в исходном вопросе. – nullfox
Я еще не проверил это очень хорошо, но что вы могли бы сделать, это вызвать 'populate()' для каждого экземпляра документа после того, как вы его запустите. Но будьте осторожны, что это может быть дороже, чем вам действительно нужно. – gustavohenke
Я люблю MongoDB и Mongoose и Node.js, но похоже, что здесь не так много лишних запросов? Раньше я много работал с MySQL, и есть только совместное мероприятие и однократное путешествие. Надеюсь, что MongoDB может сделать внутренне, чтобы исправить это. –