防止对象数组中的重复

时间:2016-02-02 03:15:43

标签: javascript arrays node.js mongodb mongoose

我正在学习Node / Mongoose,并试图找出如何防止ListItems数组中的重复:

var listitemSchema = new mongoose.Schema({
   name: String,
   rank: Number
}); 

...存在于用户内部:

var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    list: [{
        type: mongoose.Schema.Types.ObjectId,
     ref: "ListItem"
    }]  
});

...基于用户是否已在他/她的列表中具有该名称。我正在研究$addtoset但是在处理对象时无法弄清楚如何设置条件。 docs不是很有帮助,我似乎无法在网上找到类似的例子。 现在我的'POST'请求是一团糟,看起来像这样:

router.post("/editlist", isLoggedIn, function(req,res){
    User.findById(req.user._id).populate("list").exec(function(err , user) {
        if(err) {
            console.log(err);
            res.redirect("/editlist");
        } else {
            //prevent duplicates based on username
            User.update(
                { "_id": req.user._id },
                { $addToSet: { "streamName": req.body.listitem.name}
            });
            res.redirect("/watch");
         }
    });
});

任何人都可以在途中寄给我吗?我的$addToSet没有将项目推送到list数组。

1 个答案:

答案 0 :(得分:0)

根据$addToSet documentation,运算符以这种形式使用:

  

{$ addToSet:{field1:value1,...}}

其中field是一个数组。

要将项添加到list数组,我们执行:

User.update({
  { "_id": req.user._id },
  { $addToSet: { list: {"streamName": req.body.listitem.name } }}
});

您需要更新userSchema定义:

var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    list: [listitemSchema]  
});