Javascript Mongoose-expressjs-从ID数组更新集合中的多个字段

Javascript Mongoose-expressjs-从ID数组更新集合中的多个字段,javascript,node.js,express,mongoose,mongodb-query,Javascript,Node.js,Express,Mongoose,Mongodb Query,我有一个包含这些数据的Todo集合 [ { "_id": "608d5cfa11d24b1ae4710172", "completed": false, "createdAt": "2021-05-01T13:51:06.246Z", "text": "Todo 1" }, {

我有一个包含这些数据的
Todo
集合

[
    {
      "_id": "608d5cfa11d24b1ae4710172",
      "completed": false,
      "createdAt": "2021-05-01T13:51:06.246Z",
      "text": "Todo 1"
    },
    {
      "_id": "608d5cfc11d24b1ae4710173",
      "completed": false,
      "createdAt": "2021-05-01T13:51:06.246Z",
      "text": "Todo 2"
    },
    {
      "_id": "608d5cfe11d24b1ae4710174",
      "completed": false,
      "createdAt": "2021-05-01T13:51:06.246Z",
      "text": "Todo 3"
    },
    {
      "_id": "608d5cff11d24b1ae4710175",
      "completed": true,
      "createdAt": "2021-05-01T13:51:06.246Z",
      "text": "Todo 4"
    },
    {
      "_id": "608d5d0a11d24b1ae4710176",
      "completed": false,
      "createdAt": "2021-05-01T13:51:06.246Z",
      "text": "Todo 5"
    },
    {
      "_id": "608d5d0b11d24b1ae4710177",
      "completed": true,
      "createdAt": "2021-05-01T13:51:06.246Z",
      "text": "Todo 6"
    }
  ]
我想找到一种方法,以便可以从
id
s数组中更新其中的多个对象

例如,如果我有一个
[“608d5cfa11d24b1ae4710172”、“608d5cfc11d24b1ae4710173”、“608d5cfe1d24b1ae4710174”的数组]

通常,为了更新其中每一个中的值,我会使用以下方法:

await Todo.updateMany({
    _id: { 
         $in: ["608d5cfa11d24b1ae4710172", "608d5cfc11d24b1ae4710173", "608d5cfe11d24b1ae4710174"]
    }
}, {
   $set: {
        completed: true,
        text: "something"
   }
});
但是如果我想更新其中的多个非静态值呢。 为了证明我的观点,如果我有这个数组:

[
    {
      completed: true,
      text: "update"
    },
    {
      completed: false,
      text: "updated todo"
    },
    {
      completed: true
    }
]
那么,如何为每个id更新其相应的更新? 所以我会有这样的东西:

await Todo.updateMany({
    _id: { 
         $in: ["608d5cfa11d24b1ae4710172", "608d5cfc11d24b1ae4710173", "608d5cfe11d24b1ae4710174"]
    }
}, {
   $set: [
    {
      completed: true,
      text: "update"
    },
    {
      completed: false,
      text: "updated todo"
    },
    {
      completed: true
    }
]
});
我目前的解决方案是这样循环通过它们

const promises = [];
[
    {
      id: "608d5cfa11d24b1ae4710172",
      completed: true,
      text: "update"
    },
    {
      id: "608d5cfc11d24b1ae4710173",
      completed: false,
      text: "updated todo"
    },
    {
      id: "608d5cfe11d24b1ae4710174",
      completed: true
    }
].map(({ id, text, completed }) => {
     const todo = {};
     if (text) todo.text = text;
     if (completed !== undefined) todo.completed = completed;
     promises.push(Todo.findByIdAndUpdate(id, todo));
});

await Promise.all(promises);

我希望您能理解我的观点,并提前表示感谢。

使用updateMany()是不可能的,您可以试试。@turivishal这确实有效,谢谢