Mongo错误: E11000 重复键错误收集: .. 在阵列更新操作期间



我试图从架构中的数组中删除特定值(游戏(,这是代码:

User.update({ userName: user }, { $pull: { games: { _id: deleteItem } } }, function (err, val) {
console.log(err);
});

架构:

const userSchema = new mongoose.Schema({
userName: { type: String, index: true, unique: true },
userPassword: String,
games: [gameSchema]
});

错误:

Mongo错误: E11000 重复键错误收集: 山.用户索引: games.password_1 errmsg: 'E11000 重复密钥错误收集: mountain.users 索引: games.password_1 dup 密钥: { games.password: null }', [Symbol(mongoErrorContextSymbol(]: {} }

为什么会出现错误,我该如何解决?/从对象内部的数组中删除值的其他方法

感谢您的帮助!

您有一个基于数组构建games. password唯一索引。

我假设您尝试拉取的游戏是数组中的最后一个游戏。 并且您已经有一个包含空games数组的文档。

因此,这两个文档的索引值相同(null(,因为它们都不存在。

稀疏索引的存在正是出于这个原因,它允许您从unique行为中受益,同时只考虑具有存在值的文档。

所以基本上你必须重新构建你的索引,成为一个唯一+稀疏的索引。

相关内容

最新更新