【发布时间】:2017-11-17 15:36:04
【问题描述】:
我是 MongoDb 的新手,几天前我遇到了这个问题,我无法解决它。基本上,我的用户可以使用一堆图像创建新帖子。当我创建帖子时,我也创建了图像,但是当我在 mongo shell 上检查帖子数组中的条目时,一个图像可以出现两到三次。 (所有图片都用url保存)
这些是我的模型:
var postSchema = new mongoose.Schema({
Name: String,
Background: String,
Description: String,
posted: {type:Date,default: Date.now() },
images: [{type: mongoose.Schema.Types.ObjectId, ref: "image"}]
});
var imageSchema = new mongoose.Schema({
src: String,
caption: String
});
(这些 Schema 在单独的文件中,然后作为模型导出)
这是我保存帖子的代码:
app.post("/post",isLoggedIn,function(req,res){
var post= {Name: req.body.name,
Background: req.body.backg,
Description: req.body.desc};
Posts.create(post, function(err, newPost){
if(err){
console.log(err);
} else {
var allImages = req.body.img;
allImages.forEach(function(singleImg){
Images.create(singleImg, function(err, newImg){
if(err){
console.log(err);
} else {
newPost.images.push(newImg);
newPost.save(function(err){
if(err){
return res.send(err);
}
});
}
});
});
}
});
return res.redirect("/posts");
});
编辑 这是我的代码 $addToSet
app.post("/post",isLoggedIn,function(req,res){
var post= {Name: req.body.name,
Background: req.body.backg,
Description: req.body.desc};
Posts.create(post, function(err, newPost){
if(err){
console.log(err);
} else {
Posts.findByIdAndUpdate(newPost._id, {$addToSet:{images: {$each: req.body.img}}}, function(err, updatedPost){
return res.redirect("/posts");
});
}
});
});
它给了我 CastError Cast to ObjectId failed
【问题讨论】:
-
如果使用
$push或model.push()操作,实际上没有什么可以阻止这种情况的发生。如果您需要保持它们的唯一性,请确保使用$addToSet -
我会尝试使用 $addToSet
-
在问题中显示您的代码。
-
是的,现在我编辑