Mongodb用populate返回更新的对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb用populate返回更新的对象相关的知识,希望对你有一定的参考价值。
所以我是mongodb的新手,我正在尝试插入一个新的评论,其中有一个字段用户(由id引用)到一个帖子并返回更新的帖子。问题是如何只返回一个查询与填充选项?这是我的代码工作,但它的速度很慢,不确定它是否因为2'查找'查询。还有另一种方法只使用一个填充查询吗?
var newComment = {
comment:req.body.text,
isEdit:false,
user:req.body.user
};
comments.create(newComment,function(err,commentCreated){
post.find({_id:req.params.postId},function(err,postFound){
if(err){
throw err;
} else {
postFound[0].comments.push(commentCreated);
post[0].save(function(){
post.find({_id:req.params.videoId}).populate({path:'comments',populate:{path:"user",model:"users"}})
.exec(function(err,data){
if(err){
throw err;
}
else{
res.json(data);
}
})
});
});
答案
使用findByAndUpdate()
返回可以填充的Query
。在函数上调用exec()
返回一个Mongoose Promise,这样就可以将当前代码转换为
var postId = req.params.postId;
var newComment = new Comment({
comment: req.body.text,
isEdit: false,
user: req.body.user
});
newComment.save().then(function(comment){
Post.findByIdAndUpdate(
postId,
{ "$push": { "comments": comment._id } },
{ "new": true, "upsert": true }
)
.populate({
"path": "comments",
"populate": {
"path": "user",
"model": "users"
}
})
.exec();
})
.then(function(data) { res.json(data); })
.catch(function(err) { throw err; });
以上是关于Mongodb用populate返回更新的对象的主要内容,如果未能解决你的问题,请参考以下文章
19-3-18 mongoose 连表查询populate用法
MongoDB - 仅获取已填充文档的数组中的第一项 - 例如user.populate('posts', 'images.0')
找不到 id 并更新和增加子文档 - 返回 null Mongoose/mongoDB
MongoDB 中的关联查询MongoDB : aggregate/lookup 对比 Mongoose : ref / populate