2016-02-02 3 views
0

Я учусь 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.

+0

Почему вы толкая на 'streamName' поле вместо «списка»? – JohnnyHK

+0

да, это было мое плохое, получив еще одну ошибку, хотя – CXNAJ

ответ

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] 
}); 
+0

хм я изменил его, но теперь я получаю «Cast to undefined failed for value» [object Object] »в пути« list »« – CXNAJ

+0

Это была проблема со схемой определение. Я обновил ответ. – gnerkus

Смежные вопросы