最近,我一直在学习名为 The Web Developer Course 的课程。 最终项目以Camps为基础。 在项目中,引用了评论数据库和 campground 数据库,即评论的 ObjectIds 发布在露营地中的内容存储在阵列中。这是实际发生的事情。
但在我的情况下,确切的情况发生了变化。当我尝试添加新评论时,实际发生的是总对象存储在 comments array ,而不是评论的 ObjectId 。 我几乎已经通过Stackoverflow为我的问题寻求解决方案,但失败了。
我只是想将 ObjectId 存储在评论数组中,而是存储整个对象,这会给我带来更新和删除的问题一条评论。当我删除或更新注释时,操作确实发生在注释数据库中,但没有反映在Campgrounds数据库中。请帮我解决这个问题。如果有人采取相同的课程,如果你已经经历过这样的事情,请给我解决方案。架构如下所示
露营地架构:
var mongoose = require("mongoose");
var campgroundSchema = mongoose.Schema({
campGroundName: String,
campGroundImage: String,
description: String,
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Comment"
}
],
addedBy: {
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
username: String
}
});
module.exports = mongoose.model("Campground", campgroundSchema);
评论架构:
var mongoose = require("mongoose");
var commentSchema = mongoose.Schema({
text: String,
author: {
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
username: String
}
});
module.exports = mongoose.model("Comment", commentSchema);
发布评论的请求:
router.post("/", middleware.isLoggedIn, function(req, res) {
Comment.create(req.body.comment, function(err, createdComment) {
if(err) {
console.log(err);
} else {
createdComment.author.id = req.user._id;
createdComment.author.username = req.user.username;
createdComment.save(); Campground.findById(req.params.id).populate("comments").exec(function(err, foundCampground){
foundCampground.comments.push(createdComment);
foundCampground.save();
req.flash("success" , "Comment created successfully");
res.redirect("/index/" + req.params.id);
});
}
});
});
整个源代码如下,
https://1drv.ms/u/s!AmISAco3PGaPhQl_Riu8nroCom5h
请帮我解决这个问题!
答案 0 :(得分:0)
你有这一行:
foundCampground.comments.push(createdComment)
告诉mongodb将整个注释存储在数组中。
应该是这样的:
foundCampground.comments.push(createdComment._id)
只会将注释的id属性推送到数组中。
答案 1 :(得分:0)
该版本似乎有一个错误。 我更新它时问题得到解决。固定版本是5.0.3