我有一个数据库模型,如下所示:
ParentModel: {
children: [id1, id2, ...],
active: Boolean
}
ChildModel: {
id: ...,
otherInfo: {...}
}
ParentModel具有引用ChildModel文档的ID数组。我想更新每个子文档,然后更新父文档。我的代码如下:
async function activate(parent_doc) { // this is called from an express endpoint
parent_doc.active = true;
await Promise.all(parent_doc.children.map(function(child_id) {
return ChildModel.findById(child_id).then(function(child_doc) {
// Update child info
child_doc.save();
});
}));
console.log("saving doc");
parent_doc.save();
}
我确定子项是唯一的,并且child_doc每次都是一个不同的值,但这一点都不相关,因为这不是引发的调用。在parent_doc.save()
调用中,我收到一个ParallelSaveError(无法多次并行保存()同一文档)。但是,这仅被调用一次。 “保存文档”仅打印一次,并且在代码库中只有一次对activate()
的调用。我不知道这个错误可能从哪里来。
编辑:由于对子代的承诺处理不正确,我已经更新了代码,但结果是相同的。