无法删除mongoose中的帖子

时间:2015-08-01 18:59:03

标签: javascript node.js mongodb express mongoose

我正在处理我网站的用户发布方面,这是一个示例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中,我正在解决这个问题。

非常感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:1)

替换它:

delete user.posts[index];

使用splice

user.posts.splice(index, 1);

这实际上会删除数组中的条目,而不是像删除那样将其设置为null / undefined。