我试图从模式中的数组中删除一个特定值(一个游戏),下面是代码:
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)]:{}}
为什么会出现错误?如何解决?/从对象内部的数组中删除值的其他方法
谢谢你的帮助!
您有一个建立在游戏上的唯一索引。 密码
数组。
我猜你要拉的游戏是最后一局了。 并且您已经有一个带有空games
数组的文档。
因此,索引的这两个文档的值都是(null),因为它们都不存在。
稀疏索引的存在正是出于这个原因,它允许您从唯一
行为中获益,同时只考虑具有存在值的文档。
所以基本上你必须重新构建你的索引,使之成为一个唯一的+稀疏的索引。