【问题标题】:How to update document of mongodb using multiple conditions?如何使用多个条件更新 mongodb 的文档?
【发布时间】:2020-03-18 21:44:31
【问题描述】:

我有一个帖子模式,它只包含 _id、文本、喜欢和 cmets 等属性。如果满足两个条件,我想将用户 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))

有什么建议吗?

【问题讨论】:

  • “它不起作用”是什么意思?什么是“一些问题”?你有错误吗?或者更有可能您没有得到任何更新,但您不知道是因为没有匹配的用户还是 likes 数组已经有这个值?

标签: javascript node.js mongodb express mongoose


【解决方案1】:

好的,可以这样简单:

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() 正在正常执行,如果数据库操作没有失败,那么它将转到.then(),无论我们是否添加了用户,这都不是失败,成功触发了对 DB 的更新操作,但由于不满足条件,它不会更新文档 - 这不是失败,因为您没有从 DB 中得到实际错误! .catch() 在 DB 调用中出现任何故障时执行,例如 DB 连接/查询中的错误等。您需要在 .then() 中为 post 编写条件,以检查是否有任何文档更新,如果是,然后相应地发送最终结果。
猜你喜欢
  • 1970-01-01
  • 2018-06-02
  • 2017-09-22
  • 2016-09-28
  • 1970-01-01
  • 2010-12-16
  • 2016-12-22
  • 2017-06-09
  • 2019-05-25
相关资源
最近更新 更多