无副作用更改猫鼬对象的最佳方法

Best way to change mongoose objects without side-effects

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

我需要从数据库中恢复几个对象(在 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);

但是如您所见,我对该函数产生了一些不好的副作用:我实际上是在操纵一个传入函数参数的对象...但是我怎样才能达到同样的效果没有那个目标,也不必为每个项目做一个单独的查询?

感谢您的热心回复, 贾科莫

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);

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