简体   繁体   English

无法更新 mongoDb 本机 findOneAndUpdate 查询上的数据值

[英]Unable to update data values on mongoDb native findOneAndUpdate query

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));
  });
};

In my query, I need to update the status and leadActivity of the users whose leadId matches the following conditions:在我的查询中,我需要更新其leadId符合以下条件的用户的状态和leadActivity:

  1. campaign_id that matches the document (this is working fine).与文档匹配的campaign_id(这工作正常)。
  2. leadsId that matches inside that particular document (not working).在该特定文档中匹配的leadsId(不起作用)。

First I tried using only db.find({"data.campaign_id": mongoose.Types.ObjectId(campaign_id)}) and it returns me the data that matches only the first condition as specified above.首先,我尝试仅使用db.find({"data.campaign_id": mongoose.Types.ObjectId(campaign_id)})并返回仅与上面指定的第一个条件匹配的数据。 As soon as I try it along with second condition and findOneAndUpdate({....}) , accessing the nested data after including secondary filter condition returns null .一旦我与第二个条件和findOneAndUpdate({....})一起尝试,在包含辅助过滤条件后访问嵌套数据将返回null

Here's is what my document object looks like:这是我的文档 object 的样子:

在此处输入图像描述 Any help to resolve this is appreciated.任何解决此问题的帮助表示赞赏。 Thanks in advance.提前致谢。

The second condition for matching the _id in the leads -array is incorrect, you need to change it to:匹配leads -array中_id的第二个条件不正确,需要修改为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM