目前,我正在从事一个在在线训练营中一直在做的项目。这基本上是露营地的评论网站(我敢肯定会有很多人知道我的意思)。本质上,您可以注册自己,可以创建露营地,然后可以查看其他人。
我正在使用mongo数据库(如本课程所述)。
当前,我正在处理一条路线,用户可以通过该路线删除自己的个人资料。用户还能够成功删除其他露营地的投稿和评论。但是,露营地的平均评级是根据露营地模型确定的。每当有人评论营地时,他们的评论(评分,评论,姓名,用户ID,日期等)
下面是露营地模型的视图:
const campgroundSchema = new mongoose.Schema({
name: {
type: String,
required: "This field cannot be left blank"
},
image: String,
imageId: String,
description: String,
price: String,
createdAt: { type: Date, default: Date.now},
author: {
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
},
username: String
},
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Comment"
}
],
slug: {
type: String,
unique: true,
trim: true
},
reviews: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Review"
}
],
rating: {
type: Number,
default: 0
}
});
以下是评论的模型:
var reviewSchema = new mongoose.Schema({
rating:{
//set the field type
type: Number,
//Making the star rating required
required: "Please provide a rating (1 to 5 stars)",
//Define minimum and maximum values:
min: 1,
max: 5,
//Add validation to ensure that entry is an integer:
validate:{
validator: Number.isInteger,
message: "{VALUE} is not an integer value"
}
},
text:{
type: String,
},
author: {
id:{
type: mongoose.Schema.Types.ObjectID,
ref: "User"
},
username: String
},
campground: {
type: mongoose.Schema.Types.ObjectID,
ref: "Campground",
}
}, {
//timestamps: mongoose assings createdAt and updatedAt to the schema.
timestamps:true
});
现在,每当删除用户个人资料时,阵列中的评论都会被删除(很棒),但是我需要链接到营地以运行一项功能,为他们提供适当的评分。
以下是删除用户的途径:
router.delete("/users/:id", middleware.isLoggedIn, (req, res)=>{
User.findById(req.params.id, (err, user)=>{
if(err){
console.log(err);
req.flash("err", "UNABLE TO DELETE PROFILE " + err.message)
}
// delete campgrounds - finds campgrounds based on author.id and deletes them
Campground.deleteMany({"author.id": user.id}, (err)=>{
if(err){
console.log(err);
}
});
//delete reviews - finds reviews based on author.id and deletes them
Review.deleteMany({"author.id": user.id}, (err)=>{
if(err){
console.log(err)
}
// WHERE I'M STUCK
Campground.findOne( { reveiws: {"author.id":user.id} }, {new: true}). exec((err, campground)=>{
if(err){
console.log("ERROR: " + err.message);
} else{
console.log("CAMPGROUND: " + campground);
}
});
});
//delete profile picture from cloudinary
try{
cloudinary.v2.uploader.destroy(user.imageId);
user.remove();
res.redirect("/campgrounds");
} catch(err){
if(err){
req.flash("error", err.message);
return res.redirect("back");
}
}
});
});
总而言之,我要做的就是查询露营地数据库,以查找已删除其个人资料的用户进行了评论的露营地。
答案 0 :(得分:0)
您应将用户ID设置为user._id而不是user.id