Я подумал, что добавлю к этому, чтобы прояснить ситуацию для полных нубов, подобных мне.
Что сильно запутывает, если вы не внимательны, так это три разных метода заполнения. Они - методы разных объектов (Model vs. Document), принимают разные входы и дают разные выходы (Document vs. Promise).
Здесь они предназначены для тех, кто сбиты с толку:
Этот файл работает с документами и возвращает документ. В исходном примере это будет выглядеть так:
book.save(function(err, book) {
book.populate('_creator', function(err, book) {
// Do something
})
});
Поскольку он работает с документами и возвращает документ, вы можете связать их следующим образом:
book.save(function(err, book) {
book
.populate('_creator')
.populate('/* Some other ObjectID field */', function(err, book) {
// Do something
})
});
Но не будьте глупыми, как я, и попытайтесь сделать это:
book.save(function(err, book) {
book
.populate('_creator')
.populate('/* Some other ObjectID field */')
.then(function(book) {
// Do something
})
});
Помните: Document.prototype.populate () возвращает документ, поэтому это вздор. Если вам нужно обещание, вам нужно ...
Это работает над документами, но возвращает обещание, которое разрешает документ. Другими словами, вы можете использовать его следующим образом:
book.save(function(err, book) {
book
.populate('_creator')
.populate('/* Some other ObjectID field */')
.execPopulate()
.then(function(book) {
// Do something
})
});
Это лучше. Наконец, есть ...
Это работает на моделях и возвращается Обещание. Поэтому он используется несколько иначе:
book.save(function(err, book) {
Book // Book not book
.populate(book, { path: '_creator'})
.then(function(book) {
// Do something
})
});
Надеюсь, что это помогло другим новичкам.
В моем случае я случайно выбрал неверную версию пакета Telerik от самородка, какой самородок затем заменил каждый пакет, на который я сослался с неверной версией. Это затем вставило переадресацию связывания в неверную версию так, чтобы даже после того, как я заменил все правильной версией, она все еще искала неверную версию.