编程语言
首页 > 编程语言> > javascript-findOneAndUpdate数组中的嵌套对象

javascript-findOneAndUpdate数组中的嵌套对象

作者:互联网

尝试使用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(完成),或者在错误时将状态设置为E.

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

查找文档并不困难,因为我已经有了_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’):

myCollection.findOneAndUpdate({"_id": docId, "steps.name": "foo"},
    {$set: {"steps.$.state": "P"}})

>查找您需要更改的文档.
>查找对象
在数组“ steps.name”内:“ foo”.然后你得到
数组中的对象.
>您正在为对象的
属性($反映头寸).

标签:mongodb,node-js,javascript
来源: https://codeday.me/bug/20191210/2104330.html