查询Mongo数据库的数组



目前,我正在进行一个在线训练营中进行的项目。这基本上是一个露营地的评论网站(我相信会有很多人知道我的意思(。从本质上讲,你可以自己注册,你可以创建营地,然后你可以审查其他人。

我使用的是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");  
}
}
}); 
}); 

总之,我所需要做的就是查询露营地数据库,找到那些被删除个人资料的用户审查过的露营地。

您应该将用户id作为用户_id而不是user.id

相关内容

最新更新