【问题标题】:Best way to change mongoose objects without side-effects更改猫鼬对象而没有副作用的最佳方法
【发布时间】:2022-01-27 22:03:49
【问题描述】:

这个问题可能有点傻,但我遇到了一个简单的疑问,实际上是在劫持我的思想。 :)

我需要从数据库中恢复几个对象(在 mongo 中),然后在将它们发送到 API 服务器时,将单个属性更改为它们,以确保将记录置于正确的状态,以便尽快我收到一个响应(在另一个端点上异步发送给我)。 现在我正在这样做:

const SomeModel = mongoose.model('SomeModel');
const items = await SomeModel.find({ someField: 'someValue' });
const promises = items.map(async (item) => {
  await sendItem(item);
  item.status = 'SENT';
  await item.save();
});

await Promise.all(promises);

但是正如你所看到的,我对该函数做了一些不好的副作用:我实际上是在操作一个传入函数参数的对象......但是如果没有我如何实现相同的目标那,而且还不必对每个项目进行单独的查询?

感谢您的热情回复, 贾科莫。

【问题讨论】:

    标签: javascript node.js arrays mongoose javascript-objects


    【解决方案1】:
    const SomeModel = mongoose.model('SomeModel');
    const items = await SomeModel.find({ someField: 'someValue' });
    
    const bulkWriteBody = items.map((item)=>{
    return {
                updateOne: {
                  filter: { _id: item._id },
                  update: { $set: {
                      status: 'SENT,
                    } }
                },
            };
    
    })
    
    await SomeModel.bulkWrite(bulkWriteBody);
    

    有了这个,你只承诺更新所有发送的项目,你不需要手动更新它。

    【讨论】:

    • 很好的回应,谢谢! ^^
    猜你喜欢
    • 2014-01-28
    • 2019-11-30
    • 2016-07-13
    • 1970-01-01
    • 2019-03-06
    • 2021-12-31
    • 2014-04-10
    • 2023-01-05
    相关资源
    最近更新 更多