Javascript 数组中的findOneAndUpdate嵌套对象

Javascript 数组中的findOneAndUpdate嵌套对象,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,尝试使用findOneAndUpdate()更改MongoDB中数组内的对象。mongoDB的nodeJS驱动程序的文档我不清楚。 该文档如下所示: { _id:ObjectID(), some: string, body: string, steps:[ [0]{name: "foo", state:"Q"}, [1]{name: "bar", state:"Q"}, [n]{name: "fooBar", state:"Q"} ] } 我需要查找步骤名称

尝试使用
findOneAndUpdate()
更改MongoDB中数组内的对象。mongoDB的nodeJS驱动程序的文档我不清楚。 该文档如下所示:

{
  _id:ObjectID(),
  some: string,
  body: string,
  steps:[
   [0]{name: "foo", state:"Q"},
   [1]{name: "bar", state:"Q"},
   [n]{name: "fooBar", state:"Q"}
 ]
}
我需要查找步骤名称(foo),并在任务执行时将其状态设置为p(表示进行中),然后在任务出错时将其状态设置为C(表示完成)

然后,我还需要获取下一步的名称

找到文档并不难,因为我已经有了_id,这是更新部分吸引了我

编辑: 这就是我到目前为止得到的

  async msg => {
    const _id = msg.content.toString();
    const id = new objectId(_id);
    logger.info(`${name} consumer - Recieved new task, fetching details`, {
      id
    });
    try {
      const jobDetails = await collection.findOneAndUpdate(
        { _id: id },
        {
          /**/
        }
      );
      await consumer.task(jobDetails);
    } catch (e) {}
  },

它是rabbitMQ使用者的框架

我不知道您会如何选择用哪个字母来设置-p、C或E,因为它不太清楚,但在mongoDB中替换一个值时,它看起来是这样的(比如说“p”):

  • 找到需要更改的文档
  • 找到目标 在数组中
    “steps.name”:“foo”
    。你得到了 数组中的那个对象
  • 您正在为对象的属性设置新值 属性(
    $
    反映位置)
    向我们展示您在添加现有代码后正在使用的代码,尽管它不完整。我需要的区域在/**/中,因此基本上,除了声明文档不清楚之外,您在编写更新查询方面没有做任何事情。听起来像是“为我写”的问题。看一看,它有一些几乎可以复制粘贴的用例示例。不,我已经读过了,但是如果你不理解文档,很难将其应用到你的用例中。谢谢,这就成功了。我知道何时设置每个状态。当消费者收到任务时设置P,当它完成任务时设置C,当它出错时设置E(因此在catch(E){…})。谢谢,伙计!我一直在寻找这样的解决方案。
    myCollection.findOneAndUpdate({"_id": docId, "steps.name": "foo"},
        {$set: {"steps.$.state": "P"}})