Javascript Mongoose填充数组为空
我在model.js中定义了一个Javascript Mongoose填充数组为空,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在model.js中定义了一个UserSchema和一个PostSchemaUserSchema有一个对自己的Posts的引用,而PostSchema有一个对其作者的引用 在我的controllers.js方法中,我正在创建一个用户和一个post实例(绑定到新创建的用户)。我现在尝试填充用户的帖子,但mongoose返回一个空数组。然而,另一种方法是可行的(我能够通过Post实例检索用户) models.js controllers.js getUser的结果(posts为空): getPos
UserSchema
和一个PostSchema
UserSchema
有一个对自己的Post
s的引用,而PostSchema
有一个对其作者的引用
在我的controllers.js
方法中,我正在创建一个用户和一个post实例(绑定到新创建的用户)。我现在尝试填充用户的帖子,但mongoose返回一个空数组。然而,另一种方法是可行的(我能够通过Post实例检索用户)
models.js
controllers.js
getUser
的结果(posts为空):
getPost
result(正确返回了作者)
您需要将post id推送到用户模型中的posts数组中,如下所示
const getUser = (req, res) => {
const newUser = new models.User({ username: 'JohnDoe' });
newUser.save(user => {
if (err) return res.json(err);
const newPost = new models.Post({
content: 'New Post',
author: user._id
});
newPost.save(post => {
if (err) return res.json(err);
models.User.findByIdAndUpdate(user._id,
{ '$push': { 'posts': post._id } },
{ 'new': true }
)
.populate('posts')
.exec((err, u) => {
res.json(u);
})
});
});
}
使用异步/等待
const getUser = async (req, res) => {
try {
const newUser = new models.User({ username: 'JohnDoe' });
const user = await newUser.save();
const newPost = new models.Post({
content: 'New Post',
author: user._id
});
const post = await newPost.save();
const result = await models.User.findByIdAndUpdate(user._id,
{ '$push': { 'posts': post._id } },
{ 'new': true }
)
.populate('posts')
.exec();
res.json(result)
}
catch (err) {
return res.json(err);
}
}
我找不到您将帖子Id添加到用户模型中的位置。您是指类似user.posts.push(post.Id)的内容吗?是的,没错。。。。。
{
"posts": [],
"_id": "5b9426a6fd187d3949470f54",
"username": "JohnDoe",
"__v": 0
}
{
"_id": "5b94287e99072c3a173419f2",
"content": "NewPost",
"author": {
"posts": [],
"_id": "5b94287e99072c3a173419f0",
"username": "JohnDoe",
"__v": 0
},
"__v": 0
}
const getUser = (req, res) => {
const newUser = new models.User({ username: 'JohnDoe' });
newUser.save(user => {
if (err) return res.json(err);
const newPost = new models.Post({
content: 'New Post',
author: user._id
});
newPost.save(post => {
if (err) return res.json(err);
models.User.findByIdAndUpdate(user._id,
{ '$push': { 'posts': post._id } },
{ 'new': true }
)
.populate('posts')
.exec((err, u) => {
res.json(u);
})
});
});
}
const getUser = async (req, res) => {
try {
const newUser = new models.User({ username: 'JohnDoe' });
const user = await newUser.save();
const newPost = new models.Post({
content: 'New Post',
author: user._id
});
const post = await newPost.save();
const result = await models.User.findByIdAndUpdate(user._id,
{ '$push': { 'posts': post._id } },
{ 'new': true }
)
.populate('posts')
.exec();
res.json(result)
}
catch (err) {
return res.json(err);
}
}