尝试使用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消费者的框架
答案 0 :(得分:2)
我不知道如何选择要设置的大写字母-P,C或E,因为它不太清楚,但是要替换mongoDB中的值,它看起来像这样(假设为'P') :
myCollection.findOneAndUpdate({"_id": docId, "steps.name": "foo"},
{$set: {"steps.$.state": "P"}})
"steps.name": "foo"
中。然后你得到
数组中的那个对象。$
反映了位置)。