【问题标题】:Unable to update data values on mongoDb native findOneAndUpdate query无法更新 mongoDb 本机 findOneAndUpdate 查询上的数据值
【发布时间】:2020-06-08 13:49:20
【问题描述】:
exports.update_activity_status = (req, res) => {
  const {
    campaign_id,
    leadId,
    leadActivity,
    status,
  } = req.body;

  const client = mongoClient.connect(`${process.env.MONGO_URL}`, {
    useUnifiedTopology: true,
  });
  client.then((cli) => {
    cli
      .db(`${process.env.DATABASE_NAME}`)
      .collection(`${process.env.ACTIVITY_COLLECTION}`)
      .findOneAndUpdate(
        {
          "data.campaign_id": mongoose.Types.ObjectId(campaign_id),
          "data.leads.$._id": mongoose.Types.ObjectId(leadId),
          // "data.leads._id" : leadId
        },
        {
          $set: {
            "data.leads.$.leadActivity": leadActivity,
            "data.leads.$.status": status,
          },
        },
        {
          returnNewDocument: true,
        }
      )
      .then((result) => {
        console.log("UPDATED RESULT", result);
        res.json(result)
      })
      .catch((err) => console.log("new err", err));
  });
};

在我的查询中,我需要更新leadId 符合以下条件的用户的状态和leadActivity:

  1. campaign_id 与文档匹配(这工作正常)。
  2. 在该特定文档中匹配的leadsId(无效)。

首先我尝试只使用db.find({"data.campaign_id": mongoose.Types.ObjectId(campaign_id)}),它返回的数据只匹配上面指定的第一个条件。一旦我与第二个条件和findOneAndUpdate({....}) 一起尝试,在包含辅助过滤条件后访问嵌套数据将返回null

这是我的文档对象的样子:

任何解决此问题的帮助表示赞赏。提前致谢。

【问题讨论】:

    标签: javascript node.js arrays mongodb updates


    【解决方案1】:

    leads-array中匹配_id的第二个条件不正确,需要修改为:

      "data.leads._id": mongoose.Types.ObjectId(leadId)
    

    【讨论】:

    • 它工作正常。感谢您指出我的这个愚蠢问题:)
    • 最后一件事。它返回类似"lastErrorObject": { "n": 1, "updatedExisting": true }, 的内容以及更新的记录。你能帮忙解释一下这是怎么回事吗?是不是有什么错误?
    • 我认为这只是关于最后一次操作的一些信息,而不是实际错误,只要 lastErrorObject.err 未定义/空 -> 检查 stackoverflow.com/questions/21624486/… 或此处:docs.mongodb.com/manual/reference/command/getLastError
    猜你喜欢
    • 2019-04-19
    • 2021-12-15
    • 2021-11-20
    • 2019-03-14
    • 1970-01-01
    • 2022-01-26
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多