node.js - 防止 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() is not a function

如何实现?

最佳答案

为避免 blog_bookmarks 中出现重复值,请使用 $addToSet运算符(operator)。

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

您的 user.find() 可能会给您一个错误,因为它应该是 User.find() 以大写 U 开头。

https://stackoverflow.com/questions/38165736/

相关文章:

mongodb - 按 id 对 Mongo 文档进行分组,并按时间戳获取最新文档

mongodb - 选择 2 个字段并返回具有不同值的排序数组

javascript - Passport 没有保持持久的登录 session

mongodb - Docker-MongoDB 中的身份验证问题

linux - PHP升级到7后,为什么不能使用mongodb驱动?

node.js - NodeJS 崩溃 : Mongoose findById() does NOT

mongodb - 使用更新查询将文档值从字符串更改为 ObjectId

ruby-on-rails - 运行 Rails 应用程序时的 Mongo::Error::NoSe

php - 在 Ubuntu 14 上将 PHP Mongo 扩展更新到 1.5

python - 具有完整行对象的 Mongo Distinct Query