Я пытаюсь изучить основные c отношения с MongoDB и mon goose, используя Node и Express.
Модель пользователя
let mongoose = require("mongoose");
userSchema = mongoose.Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
}
});
userSchema.virtual("posts", {
ref: "Post",
localField: "_id",
foreignField: "userId"
});
// Making sure that password field is not present in responses
userSchema.methods.toJSON = function() {
let user = this.toObject();
delete user.password;
// console.log(user.posts);
return user;
};
// Creating model from schema
User = mongoose.model("User", userSchema);
module.exports = User;
Почтовая модель
let mongoose = require("mongoose");
postSchema = mongoose.Schema({
body: {
type: String,
required: true
},
userId: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "User"
}
});
let Post = mongoose.model("Post", postSchema);
module.exports = Post;
Это две модели, с которыми я работаю. У пользователей много сообщений.
Теперь я знаю, что могу получить одного пользователя по:
let user = await User.findOne();
И я могу заполнить отношение сообщений по:
await user.populate("posts").execPopulate();
Но когда я console.log(user)
или res.send(user)
, я вижу только пользовательские данные, я не вижу данных о связях постов. Я могу console.log(user.posts)
и получить данные таким образом. Но почему это не идет с самим объектом? Это поведение по умолчанию, и если это так, как мне получить пользовательский объект с массивом posts в моем ответе?