我正在处理我网站的用户发布方面,这是一个示例mongoose查询,我试图删除帖子:
mongoose.model('users').findOne({ _id: req.user._id }, function(err, user){
if(err) console.log("ERROR: ", err);
for(var i = 0, length = user.posts.length; i < length; i++){
var post = user.posts[i],
index = i;
console.log("User Post: ", post);
console.log("User INDEX: ", index);
if(post == req.params.postid){
console.log("USER POSTS BEFORE: ", user.posts);
delete user.posts[index];
user.posts = user.posts.filter(function(value){ return value ? true : false; });
if(postCount > 3) user.posts.push(latestPost.postid);
}
}
console.log("USER POSTS AFTER: ", user.posts);
user.save();
});
看起来这里存在问题:
delete user.posts[index];
user.posts = user.posts.filter(function(value){ return value ? true : false; });
console.log甚至可以返回成功:
USER POSTS BEFORE: ["55bd150c13287825380d6476","55bd151413287825380d6479"]
USER POSTS AFTER: ["55bd150c13287825380d6476"]
似乎我只是这样做
delete user.posts[index];
user.posts = user.posts
它会起作用,但我会将其中一个值设为null,我不想要这个。
我也试过在阵列原型上使用jresigs .remove,这也不起作用..
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
奇怪的是,当我在jsfiddle上尝试这些东西时,它们工作得很好,就在expressJS中,我正在解决这个问题。
非常感谢任何帮助,谢谢
答案 0 :(得分:1)
替换它:
delete user.posts[index];
使用splice
:
user.posts.splice(index, 1);
这实际上会删除数组中的条目,而不是像删除那样将其设置为null / undefined。