Вы можете добавить строку кода ниже, чтобы увидеть, что происходит в вашем коде:
mongoose.set('debug', true);
Первое утверждение: await newBlog.save();
запускает операцию insertOne
с документом, имеющим author
set: author: ObjectId("...")
, затем вы запускаете await foundUser.save();
, который явно устанавливает массив блогов:
{ '$set': { blogPosts: [ ObjectId(...), ObjectId(...) ] }
Это имеет смысл, потому что вы использовали concat
в JS коде. Дело в том, что другого третьего запроса нет, потому что вы пытаетесь запустить populate
для существующего объекта в памяти, который не будет работать - для заполнения требуется запрос вместо объекта в памяти.
придется запросить вашу базу данных снова, чтобы получить author
заполнено:
let userPosts = await blogTable
.find({ author: foundUser._id })
.populate('author');
console.log(userPosts);
, что вызывает два запроса:
Mongoose: blogposttables.find({ author: ObjectId("...") }, { projection: {} })
Mongoose: usertables.find({ _id: { '$in': [ ObjectId("...") ] } }, { projection: {} })