提问者:小点点

MongoError: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]
});

错误:

MongoError:E11000重复密钥错误收集:Mountain.Users索引:Games.Password_1错误消息:“E11000重复密钥错误收集:Mountain.Users索引:Games.Password_1 dup密钥:{Games.Password:null}”,[Symbol(mongoErrorContextSymbol)]:{}}

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

谢谢你的帮助!


共1个答案

匿名用户

您有一个建立在游戏上的唯一索引。 密码数组。

我猜你要拉的游戏是最后一局了。 并且您已经有一个带有空games数组的文档。

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

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

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