如何在 NodeJS - Express 中使用 mongoose 更新多条记录,每条记录都具有唯一值(项目并非都具有相同的值)而不会导致 N+1 问题?我有以下场景:
产品:
[
{
_id: "407f191e810c19729de860ea",
title: "....",
in_stock: 100,
},
{
_id: "507f1f77bcf86cd799439011",
title: "....",
in_stock: 100,
},
....
]
然后给出一个像这样的“订单”请求:
[
{
item_id: "507f1f77bcf86cd799439011",
quantity: 5
},
{
item_id: "407f191e810c19729de860ea",
quantity: 8
},
...
]
换句话说,给定一个 id,quantity 元组数组,我需要减少数据库中每个对应记录的存量。如何在不必对每个项目运行一个查询的情况下完成这项工作?
从上面的例子来看,数据库中的最终结果应该是:
[
{
_id: "407f191e810c19729de860ea",
title: "....",
in_stock: 92,
},
{
_id: "507f1f77bcf86cd799439011",
title: "....",
in_stock: 95,
},
....
]
最佳答案
好吧,在这种情况下,您可以使用这样的代码。但我非常怀疑这就是你想要实现的目标。
我也曾在我的项目中尝试过同样的问题,但遇到的唯一方法是按 id 进行迭代并仅运行不同的查询。
db.Element.update(
{ _id: { $in: ['id1', 'id2', 'id3'] } },
{ $set: { visibility : yourvisibility } }
)
像这样的代码应该可以解决问题
updateById(0); //call updates iteration
function updateById(i) {
if (i < order.length) {
Products.findByIdAndUpdate({ _id: order[i]._id }, { in_stock: order[i].in_stock }, (err, data) => {
if (!err) { updateById(i++); }
else{throw err}
});
}
else {
// return
}
}
关于node.js - Mongoose - 如何用每条记录一个值更新许多特定记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54057257/