Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用多个条件更新mongodb的文档?_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 如何使用多个条件更新mongodb的文档?

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' } }] 我编写

我有一个post模式,它只包含_id、text、likes和comments等属性。如果满足两个条件,我想将用户id放入数组中。首先,帖子的id应该与查询参数匹配,然后likes数组不应该已经包含试图喜欢帖子的人的id。相反,错误消息应该出现:帖子已经被喜欢了

类似于post模式中的密钥对

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数组已经具有此值?