我正在尝试构建一个包含子文档的Mongoose Schema,因此我可以拥有一个包含用户信息及其联系人的文档。我们的想法是能够在Contacts子文档上具有CRUD功能,而无需单独的集合。
(很抱歉说明显,只是想明确)
所以父模式是"用户"并且它是"联系人" ...
我把我的模型编码为:
var UserSchema = new Schema({
login: {
type: String,
unique: true,
required: true
},
password: {
type: String,
required: true
},
email:{
type: String,
required: true
},
firstname:{
type: String,
required: false
},
lastname: {
type: String,
required: false
},
contacts:[ContactSchema]
})
var ContactSchema = new Schema({
contactFirstName:{
type: String,
required: true
},
contactLastName:{
type: String,
required: true
},
contactEmail: {
type: String,
required: true
}
})
但是当我运行我的API时,我收到一条错误说明:
TypeError:架构阵列路径contacts
我对Mongoose来说相当新,但从我所见过,这就是你实现子文档的方式。
任何人都能看到我失踪的东西吗?
以下是我想在Express API中调用的示例路由:
router.route('/')
//CREATE NEW USER
.post(function(req, res){
var user = new User();
user.login = req.body.login;
user.firstname = req.body.firstname;
user.lastname = req.body.lastname;
user.email = req.body.email;
user.password = req.body.password;
user.contacts.contactFirstName = req.body.contacts.contactFirstName;
user.contacts.contactLastName = req.body.contacts.contactLastName;
user.save(function(err){
if(err)
res.send(err);
res.json({message:'User has been created'});
})
})
答案 0 :(得分:0)
在最新版本的Mongoose中我不认为[someSchema]是必要的。你可以把someSchema。所以没有数组括号。如果您使用的是旧版本,请尝试将.add与架构一起使用。就像这样。
var ContactSchema = new Schema();
ContactSchema.add({
contactFirstName:{
type : String,
required: true
},
contactLastName:{
type : String,
required: true
},
contactEmail: {
type : String,
required: true
}
})
将您的contacts:[ContactSchema]
添加到UserSchema
答案 1 :(得分:0)
你走在正确的道路上,只是一个简单的错误。您在ContactSchema
中使用了UserSchema
而未对其进行定义,这就是为什么它未定义的原因。
在定义ContactSchema
之前定义UserSchema
,然后在contacts数组中使用它。它应该工作正常。
var UserSchema = new Schema({
//rest of the variables...
lastname: {
type: String,
required: false
},
contacts:[ContactSchema]
})
var ContactSchema = new Schema({
contactFirstName:{
type: String,
required: true
},
//other variables...
});
<强>更新强>
在创建新的user
时,您没有将user.contacts
定义为object
,而是直接尝试将值分配给user.contacts.contactFirstName
和user.contacts.contactLastName
。但是,由于未定义user.contact,因此它将undefined
,因此error
:无法读取属性&#39; contactFirstName&#39;未定义的将会到来。
在为user.contacts = {};
和user.contacts.contactFirstName
分配值之前添加user.contacts.contactLastName
。
user.contacts = {};//add this line
user.contacts.contactFirstName = req.body.contacts.contactFirstName;
user.contacts.contactLastName = req.body.contacts.contactLastName;