我有以下架构:
var userSchema = mongoose.Schema({
local : {
email : String,
password : String,
movies : [{
moviename : String,
rating : Number
}],
}
});
我使用以下方法向数组添加条目:
user.local.movies.push({ moviename : "Top Gun", rating : 80});
user.save(function (err) {
if (err)
console.log("Error in saving");
res.end(0);
});
但我也需要删除条目。我需要能够通过" moviename"删除条目。名称。 我尝试使用 pull :
user.local.movies.pull({ moviename : "Top Gun"});
但它不起作用。
有人可以告诉我如何从阵列中删除条目吗?
谢谢。
答案 0 :(得分:2)
我认为使用显式update
调用而不是Mongoose的数组操作方法更容易,这些方法并不总是像您期望的那样工作:
User.update({_id: user._id},
{$pull: {'local.movies': {moviename: 'Top Gun'}}}, callback);
答案 1 :(得分:1)
这样做的一种方法是使用splice函数从数组中删除元素,假设您可以找到索引。例如:
User.findOne(function(err, user) {
var movies, index;
movies = user.movies;
for (index = 0; index < movies.length; index++) {
if (movies[index].moviename === "Top Gun") {
break;
}
}
if (index !== movies.length) {
movies.splice(index, 1);
}
user.save(function(err, user) {
res.send(user);
});
});
(知道上面的代码只针对一个用户执行此操作,并且硬编码要删除的影片名称,但您明白了。)