我正在学习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 :(得分: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]
});