我设计了我的猫鼬模式,里面有一个由对象组成的结构,如下所示。以下是User.js:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var UserSchema = new Schema({
name:String,
surname:String,
questions: {
q1:{statement:String, spoof:Boolean},
q2:{statement:String, spoof:Boolean},
q3:{statement:String, spoof:Boolean}
},
color:{
red:Number,
green:Number,
blue:Number
}
});
var User = mongoose.model("User", UserSchema);
module.exports = User;`所以我想问三个问题,然后是三个数字,这似乎很好。但是,当我需要这个模式并引用User.questions时,它说它是未定义的,即使我已经在模式中定义了它?这里是我处理表单中的POST数据并尝试将其保存到DB的地方。
app.post("/register", (req, res) => {
User.firstname = req.body.firstname;
User.surname = req.body.surname;
User.questions.q1.statement = req.body.q1;
User.questions.q1.spoof = strToBoolean(req.body.q1Spoof);
User.questions.q2.statement = req.body.q2;
User.questions.q2.spoof = strToBoolean(req.body.q2Spoof);
User.questions.q3.statement = req.body.q3;
User.questions.q3.spoof = strToBoolean(req.body.q3Spoof);
User.color.red = 255;
User.color.green = 255;
User.color.blue = 255;
User.save(err => console.log("Did not save to database: \n" + err));
});strToBoolean函数将字符串转换为布尔值,这应该很简单吗?但我还没看到任何对我有帮助的答案。任何帮助都很感激。
发布于 2018-05-09 14:40:09
User是一个模型。您需要基于这个模型实例化一个文档,并将变量分配给它:
app.post("/register", (req, res) => {
let user = new User()
user.firstname = req.body.firstname;
user.surname = req.body.surname;
user.questions.q1.statement = req.body.q1;
user.questions.q1.spoof = strToBoolean(req.body.q1Spoof);
user.questions.q2.statement = req.body.q2;
user.questions.q2.spoof = strToBoolean(req.body.q2Spoof);
user.questions.q3.statement = req.body.q3;
user.questions.q3.spoof = strToBoolean(req.body.q3Spoof);
user.color.red = 255;
user.color.green = 255;
user.color.blue = 255;
user.save(err => console.log("Did not save to database: \n" + err));
});当不存在默认值时,我不确定Mongoose如何处理嵌套对象模式,因此您可能需要实例化问题对象以及每个q1、q2和q3,然后才能将它们分配给它们:
user.questions = {q1: {}, q2: {}, q3: {}};
user.questions.q1.statement = req.body.q1;还可以通过将对象传递给构造函数来创建文档:
let user = new User({
firstname: req.body.firstname,
surname: req.body.surname,
questions: {
q1: {
statement: req.body.q1,
spoof: strToBoolean(req.body.q1Spoof)
},
q2: {
statement: req.body.q2,
spoof: strToBoolean(req.body.q2Spoof)
},
q3: {
statement: req.body.q3,
spoof: strToBoolean(req.body.q3Spoof)
}
}
color: {
red: 255,
green: 255,
blue: 255
}
})
user.save(err => console.log("Did not save to database: \n" + err));https://stackoverflow.com/questions/50255810
复制相似问题