我试图从架构中的数组中删除特定值(游戏(,这是代码:
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
行为中受益,同时只考虑具有存在值的文档。
所以基本上你必须重新构建你的索引,成为一个唯一+稀疏的索引。