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这确实有效,谢谢