无副作用更改猫鼬对象的最佳方法
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);
有了这个,您只需承诺更新所有已发送的项目,您不需要手动更新它。
这个问题可能有点傻,但我遇到了一个简单的疑问,它实际上正在劫持我的思想。 :)
我需要从数据库中恢复几个对象(在 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);
有了这个,您只需承诺更新所有已发送的项目,您不需要手动更新它。