node.js - Mongoose - 如何用每条记录一个值更新许多特定记录?

标签 node.js mongoose

如何在 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/

相关文章:

node.js - Dynamoose:如何获取最新行?

node.js - 如何在 Node 和 react 之间共享代码?

javascript - NOSQL 数据库存储和组织图像的最佳位置是什么

node.js - Node 服务器地理位置

javascript - 将普通对象转换到 Mongoose 文档

database - 处理在 mongodb 中完全相同的多个查询

javascript - 在循环依赖NodeJS中访问module.exports不存在的属性

node.js - 即使不存在唯一约束, Mongoose 唯一验证错误

javascript - 向对象 Mongoose 方式添加字段