const mongoose=require("mongoose");
const supportSchema=new mongoose.Schema({
type:String,
comment:String,
date:String,
status:String,
author:{
id:{
type:mongoose.Schema.Types.ObjectId,
ref:"User"
},
username:String
}
})
module.exports=mongoose.model("Support",supportSchema);
这是事物的明显方面:
//posting support to admin
app.post("/admin/support",isLoggedIn,function(req,res){
const data={
type:req.body.type,
comment:req.body.comment,
status:"Pending"
}
Support.create(data,function(err,newsupport){
console.log(req.user);
if(err){
console.log(err);
}else{
//add username and id to ticket
Support.author.id=req.user._id;
Support.author.username=req.user.username;
// save ticket
Support.save();
res.redirect("/home");
}
})
})
正如我们在上面的架构中看到的那样,我已经定义了作者,内部作者也定义了id。每当我尝试创建故障单时,我都会遇到错误。它告诉我“无法设置未定义的属性'id'” 。 我什至通过控制台日志req.user(无法在路由内部访问)进行交叉检查。
我需要app.js中的架构
const Support=require("./models/newsupport");
PS:文件名是newsupport。 我已经像这样配置了mongodb连接:
mongoose
.connect('mongodb+srv://saidarshan:R@mb02501@cluster0-wjhf4.mongodb.net/project?retryWrites=true&w=majority', {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(() => {
console.log('Connected to DB');
})
.catch((err) => {
console.log('ERROR', err.message);
});
请帮助我。谢谢
答案 0 :(得分:0)
在您使用let newTicket = Support.create(...
构造函数时,我看不到要在哪里使用新变量。尝试类似newTicket.author.id
之类的方法,然后设置import ludwig
ludwig.visualize.learning_curves(
[train_stats],
TARGET,
model_names=None,
output_directory=None,
file_format='pdf'
)
等。
答案 1 :(得分:0)
该Schema声明为正确,但是您正在尝试将作者(子文档)保存在Schema本身,而不是实际文档中。
Support.author.id=req.user._id;
Support.author.username=req.user.username;
// save ticket
Support.save();
您要保存在新创建的文档而不是架构上。像这样:
app.post("/admin/support",isLoggedIn,function(req,res){
const data={
type:req.body.type,
comment:req.body.comment,
status:"Pending"
}
Support.create(data,function(err,newsupport){
console.log(req.user);
if(err){
console.log(err);
}else{
//add username and id to ticket
newsupport.author.id=req.user._id;
newsupport.author.username=req.user.username;
// save ticket
newsupport.save();
res.redirect("/home");
}
})
})
当然,另一种选择是将所有对象(文档和子文档)组合在一起,一次完成所有操作,这样您就可以避免进行两次查询来执行一项任务。
const data={
type:req.body.type,
comment:req.body.comment,
status:"Pending",
author: {
id: req.user._id,
username: req.user.username
}
}
您可以将其传递给Support.create
,而不必再在创建的文档上再次调用save
方法。