单个字段的多次更新导致 mongoDB 中"Updating the path 'X' would create a conflict at 'X'"



我有以下更新操作:

private async onCategoryImagesModified(data: ModifiedFilesEventData) {
this.categoryModel
.findByIdAndUpdate(data.resourceId, {
$pullAll: { images: data.removedFiles || [] },
$addToSet: { images: { $each: data.addedFiles || [] } }
}).catch(error => this.logger.warn(error))
}

基本上,每次模型category的图像发生变化时,我都想通过从images中删除所有已删除的路径来更新文档。为images添加新路径。

我知道我不能在更新中多次引用同一个字段,但是有没有办法在没有的情况下做到这一点2个独立的更新操作?

我知道我不能在一次更新中多次引用同一个字段

更新将不支持同一字段多次,如果你想在单个查询中这样做,你可以尝试从MongoDB 4.2开始使用聚合管道更新,

  • $filter迭代images的循环并移除$not$in的输入元素
  • $setUnion从输入元素和images字段中获取唯一元素
private async onCategoryImagesModified(data: ModifiedFilesEventData) {
let stages = [];
// remove fields
if (data.removedFiles) {
stages.push({
$set: {
images: {
$filter: {
input: "$images",
cond: { $not: { $in: ["$$this", data.removedFiles] } }
}
}
}
});
}
// add fields
if (data.addedFiles) {
stages.push({
$set: { images: { $setUnion: ["$images", data.addedFiles] } }
});
}
this.categoryModel
.findByIdAndUpdate(data.resourceId, [stages])
.catch(error => this.logger.warn(error))
}

游乐场

相关内容

  • 没有找到相关文章

最新更新