mongoose模式中的嵌套对象

我在这里看到了很多关于这个问题的答案,但是我仍然不明白(也许是因为他们使用了更多“复杂”的例子)…所以我试图做的是一个“客户”的模式,将有两个嵌套“子字段”的字段,以及其他可能重复的字段。 这里是我的意思:

let customerModel = new Schema({ firstName: String, lastName: String, company: String, contactInfo: { tel: [Number], email: [String], address: { city: String, street: String, houseNumber: String } } }); 

电话电子邮件可能是一个数组。 和地址将不会重复,但有一些子字段,你可以看到。

我怎样才能做这个工作?

 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); var CustomerModel = mongoose.model('CustomerModel', { firstName: String, lastName: String, company: String, connectInfo: { tel: [Number], email: [String], address: { city: String, street: String, houseNumber: String } } }); //create a record var customer = new CustomerModel({ firstName: 'Ashish', lastName: 'Suthar', company: 'asis', connectInfo: { tel: [12345,67890], email: ['me@a.com','you@a.com'], address: { city: 'x', street: 'y', houseNumber: 'x-1' } } }); //insert customer object customer.save((err,cust) => { if(err) return console.error(err); //this will print inserted record from database //console.log(cust); }); // display any data from CustomerModel CustomerModel.findOne({firstName:'Ashish'}, (err,cust) => { if(err) return console.error(err); //to print stored data console.log(cust.connectInfo.tel[0]); //output 12345 }); //update inner record CustomerModel.update( {firstName: 'Ashish'}, {$set: {"connectInfo.tel.0": 54320}} ); 
  //address model var addressModelSchema = new Schema({ city: String, street: String, houseNumber: String)} mongoose.model('address',addressModelSchema ,'address' ) //contactInfo model var contactInfoModelSchema = new Schema({ tel: [Number], email: [String], address : { type : mongoose.Schema.Type.ObjectId, ref:'address' } )} mongoose.model('contactInfo ',contactInfoModelSchema ,'contactInfo ') //now the customer model var customerModelSchema = new Schema({ firstName: String, lastName: String, company: String, contactInfo : { type : mongoose.Schema.Type.ObjectId, ref:'contactInfo ' } }); mongoose.model('customer',customerModelSchema ,'customer') //add new address then contact info then the customer info // it is better to create model for each part.