Javascript mongodb在事件注释中将用户添加到like数组中
因此,我尝试将用户添加到likes数组,目前我无法,因为,我找不到如何获取事件注释的方法,findone失败,我使用findone(on event.comments)获取catch error函数,尝试了映射,但由于模式看起来像这样(见下文),我有点困惑 事件模型Javascript mongodb在事件注释中将用户添加到like数组中,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,因此,我尝试将用户添加到likes数组,目前我无法,因为,我找不到如何获取事件注释的方法,findone失败,我使用findone(on event.comments)获取catch error函数,尝试了映射,但由于模式看起来像这样(见下文),我有点困惑 事件模型 creator: { type: Schema.Types.ObjectId, ref: 'User' }, comments: [ { user: { type: S
creator: {
type: Schema.Types.ObjectId,
ref: 'User'
},
comments: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
text: {
type: String,
required: true
},
likes: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'User'
}
}
]
}
]
}
我目前的职能:
commentLike: async (req, res) => {
Events.findById(req.params.idas)
.then((event) => {
event.comments.findById(req.params.commentID) //this fails maybe since its not schema model anymore?
.then((comment) => {
if (comment.likes.filter((like) => { return like.user.toString() === req.params.id; }).length > 0) {
return res.status(400).json({ alreadyliked: 'already liked' });
}
event.comment.likes.unshift({ user: req.params.id });
return event.save().then((resevent) => { return res.json(resevent); });
});
})
.catch((err) => {
res.status(404).json({ nopostfound: 'No commnet found' });
});
}
我经过三个参数
id-这是用户id
idas-哪个是事件id
commentID-commentID您可以试试这个
Events.findOneAndUpdate(
{ _id: req.params.idas, comments: { $elemMatch: { user: req.params.commentID } } },
{ $push: { "comments.$.likes": { user: req.params.id } } }
)
您可以使用
findoneandupdate
而不是执行所有这些操作。您能提供更多关于这方面的上下文吗?我看了文档,但我仍然不清楚您的mongodb和mongoose版本是什么?mongo:3.4.5,mongoose:4.11.3$elemMatch:{user:req.params.commentID}应该是_id而不是user?既然我们一直在征求意见?尝试更改它,但没有任何结果…启用mongoose logger后,该功能不会启动,(findoneandupdate)并且正常工作!不得不调用回调函数,谢谢!另外,我想问一下,现在我可以添加任意数量的喜欢(来自一个用户),在这个函数中什么是正确的检查,以防止用户添加更多喜欢?您可以在上述查询中使用$addToSet
而不是$push