Mongoose.js-当我只保存一次时,“无法多次并行保存()同一文档”

时间:2020-06-30 20:12:34

标签: javascript node.js express mongoose promise

我有一个数据库模型,如下所示:

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()的调用。我不知道这个错误可能从哪里来。

编辑:由于对子代的承诺处理不正确,我已经更新了代码,但结果是相同的。

0 个答案:

没有答案