使用 mongoose 通过 id 更改嵌套对象的值

change values of nested objects by id with mongoose

我是 MongoDB 的新手,我正在尝试完成一项非常简单的任务,但是我做不好。

我想要的是改变进程状态,但我尝试了“FindAndUpdate”、“UpdateOne”和“FindByIdAndUpdate”,但都不行。

可能跟我的架构有关。我应该为流程创建一个新架构吗?

MongoDB 集合中的我的数据库条目:

_id: 622c98cfc872bcb2578b97a5
username:"foo"
__v:0
 process:Array
  0: Object
   processname:"bar"
   process_status:"stopped"
   _id: 6230c1a401c66fc025d3cb88

我当前的架构:

const User = new mongoose.Schema(
    {
        username: { type: String, required: true },
        process: [
            {
                processname: {
                    type: String,
                },
                process_status: {
                    type: String,
                },
            },
        ],
    },
    { collection: "user-data" }
);

我当前的代码:

const startstopprocess = await User.findByIdAndUpdate(
            { _id: "6230c1a401c66fc025d3cb88" },
            { process_status: "started" }
        ).then(function (error, result) {
            console.log(error);
            console.log(result);
        });

您可以这样使用位置运算符$

db.collection.update({
  "process._id": "6230c1a401c66fc025d3cb88"
},
{
  "$set": {
    "process.$.process_status": "started"
  }
})

请注意如何使用位置运算符可以说 mongo“从您在查找阶段找到的对象,将 process_status 变量更新为 started

示例here