Я определил UserSchema
и PostSchema
в моем model.js. UserSchema
имеет ссылку на свой собственный Post
s, а PostSchema
имеет ссылку на своего автора.
В моих controllers.js
методах я создаю пользователя и экземпляр сообщения (привязанный к вновь созданному пользователю). Сейчас я пытаюсь заполнить сообщения пользователя, но mongoose возвращает пустой массив. Однако работает наоборот (я могу получить пользователя с помощью экземпляра Post).
models.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: String,
posts: [{
type: Schema.Types.ObjectId,
ref: 'Post'
}]
})
const PostSchema = new Schema({
content: String,
author: {
type: Schema.Types.ObjectId,
ref: 'User'
}
})
const Post = mongoose.model('Post', PostSchema, 'posts');
const User = mongoose.model('User', UserSchema, 'users');
module.exports = { Post, User }
controllers.js
require('../model/db'); // DB config
const mongoose = require('mongoose');
const models = require('../model/models');
const getUser = (req, res) => {
const user = new models.User({
_id: new mongoose.Types.ObjectId(),
username: 'JohnDoe'
});
user.save(function (err) {
if (err) return res.json(err);
const post = new models.Post({
content: 'New Post',
author: user.id
});
post.save(function (err) {
if (err) return res.json(err);
models.User.findOne({
username: 'JohnDoe'
})
.populate('posts').exec((err, user) => {
res.json(user);
})
});
});
}
const getPost = (req, res) => {
const user = new models.User({
_id: new mongoose.Types.ObjectId(),
username: 'JohnDoe'
});
user.save(function (err, user) {
if (err) return res.json(err);
const post = new models.Post({
content: 'NewPost',
author: user.id
});
post.save(function (err, post) {
if (err) return res.json(err);
models.Post.findOne({
content: 'NewPost'
})
.populate({
path: 'author',
model: 'User'
}).exec((err, user) => {
res.json(user);
})
});
});
}
Результат
getUser
(сообщения пусты):
{
"posts": [],
"_id": "5b9426a6fd187d3949470f54",
"username": "JohnDoe",
"__v": 0
}
getPost
результат (автор верен правильно)
{
"_id": "5b94287e99072c3a173419f2",
"content": "NewPost",
"author": {
"posts": [],
"_id": "5b94287e99072c3a173419f0",
"username": "JohnDoe",
"__v": 0
},
"__v": 0
}