Javascript 如何使用多个条件更新mongodb的文档?
我有一个post模式,它只包含_id、text、likes和comments等属性。如果满足两个条件,我想将用户id放入数组中。首先,帖子的id应该与查询参数匹配,然后likes数组不应该已经包含试图喜欢帖子的人的id。相反,错误消息应该出现:帖子已经被喜欢了 类似于post模式中的密钥对Javascript 如何使用多个条件更新mongodb的文档?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我有一个post模式,它只包含_id、text、likes和comments等属性。如果满足两个条件,我想将用户id放入数组中。首先,帖子的id应该与查询参数匹配,然后likes数组不应该已经包含试图喜欢帖子的人的id。相反,错误消息应该出现:帖子已经被喜欢了 类似于post模式中的密钥对 likes:[{ user:{ type: Schema.Types.ObjectId, refPath:'onModel' } }] 我编写
likes:[{
user:{
type: Schema.Types.ObjectId,
refPath:'onModel'
}
}]
我编写了以下查询,但它不起作用。更新部分工作正常,但第一个参数存在一些问题
Post.update({$and: [{ _id: req.params.postid},{"likes": { $ne : { user:
authorizedData.jwt_payload.patient._id }}}]},
{ $push: { likes: {user: authorizedData.jwt_payload.patient._id }}})
.then(post => res.json(post))
.catch(err => res.json(err))
有什么建议吗?好的,可以这样简单:
Post.update({
_id: req.params.postid,
'likes.user': {
$ne:
authorizedData.jwt_payload.patient._id
}
},
{ $push: { likes: { user: authorizedData.jwt_payload.patient._id } } })
.then(post => res.json(post))
.catch(err => res.json(err))
是的,它可以工作,但出现了一个小问题,即虽然没有将用户添加到数组中,但仍然执行“then”块。它没有运行catch块。@Emma:
.then()
&.catch()
正在正确执行,如果DB操作没有失败,那么它将转到.then()
,无论我们是否添加了用户,这都不是失败,对DB的更新操作已成功触发,但由于不满足条件,因此不会更新文档-这不是失败,因为您没有从DB获得实际错误.catch()
在数据库调用中出现任何故障(如数据库连接/查询中出现错误等)时执行。。您需要在中为post编写一个条件。然后()
检查是否更新了任何文档,如果是,则相应地发送最终结果。这是什么意思“它不工作”?什么是“某些问题”?你有错误吗?或者更可能的情况是,您没有得到任何更新,但不知道这是因为没有匹配的用户,还是因为likes数组已经具有此值?