防止Mongoose模式中的数组中的重复条目

时间:2016-07-03 00:44:27

标签: node.js mongodb mongoose

用户架构:

var UserSchema = new Schema({

name:           { type: String, required:true },
email:          { type: String, required:true, lowercase: true , index : { unique: true } },
password :      { type: String, required:true , select:true },
blog_bookmarks: [{ type: String }]

});

为特定用户添加blog_bookmarks值的API

api.post('/add_bookmark_blog', function(req, res){

 User.findOne({_id: req.query.user_id}, function(err, user){
    if(err)
    {
        res.json(err)
    }
    else{
        var blogid = req.body.blog_id;   
        user.find({ blog_bookmarks : blogid}, function(res1, result){
            if(res1){
                user.blog_bookmarks.push(blogid);
                user.save(function(err) {
                    if(err){
                            res.json('ERROR at adding bookmark')
                        }
                    else {
                            res.json('bookmark for blog added')
                        }
                })
            }
            else{
                res.json('Already bookmarked')
            }  
        });
    }
    })
});

我想将blog_id添加到blog_bookmarks数组,只要它不存在,我不想要多个条目。

目前,user.find()会出现控制台错误

  

user.find()不是函数

如何实现它?

1 个答案:

答案 0 :(得分:5)

要避免blog_bookmarks中的重复值,请使用$addToSet运算符。

User.update({_id: req.query.user_id}, {$addToSet: {blog_bookmarks: blogid}})

您的user.find()可能会出错,因为它应该是User.find(),并且在开头有一个大写字母U。