Javascript Mongoose从数组映射中拼接一个值
我遇到了一种行为,我希望得到解释 我有一个users集合,它有一个uid,在它的模式中有一个数组字段的映射Javascript Mongoose从数组映射中拼接一个值,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我遇到了一种行为,我希望得到解释 我有一个users集合,它有一个uid,在它的模式中有一个数组字段的映射 userSchema = new mongoose.Schema({ uid: {type: String, unique: true}, words: {type: Map, of: Array} }) 我想从某个键的数组中删除一个值,假设我有一个用户: { uid: "3", words: { "example" -&g
userSchema = new mongoose.Schema({
uid: {type: String, unique: true},
words: {type: Map, of: Array}
})
我想从某个键的数组中删除一个值,假设我有一个用户:
{
uid: "3",
words: {
"example" -> ['one', 'two', 'three']
}
}
我想从示例中删除值'two'
为此,我所做的是:
deleteValue = (id, key, value, callback) => {
userModel.findOne({ uid: id }, (err, user) => {
if (err) {
console.log(err);
return;
}
if (user.words.has(key)) {
const valuesArray = user.words.get(key);
const indexOfValue = valuesArray.indexOf(value);
if (indexOfValue >= 0) {
valuesArray.splice(indexOfValue, 1);
user.words.set(key, valuesArray);
user.save().then(() => callback("Deleted " + value + " From " + key));
}
}
else {
callback("Key not found");
}
});
}
但是数据库中的用户从未更改,我记录了新的ValuesRay,它确实更改了,我记录了user.save返回的承诺,它似乎是没有该值的用户,我发现修复它的唯一方法是处理ValuesRay的副本:
// const valuesArray = user.words.get(key);
const valuesArray = [...user.words.get(key)];
有人能解释为什么当我没有处理阵列的副本时,它没有保存没有拼接值的用户吗?即使它看起来确实保存了一个没有值的用户
谢谢。尝试
过滤器
并保存修改后的数组。