Вложенные объекты в схемах мангуста
Я видел много ответов на этот вопрос здесь, но я все еще не понимаю (возможно, потому, что они используют более "сложные" примеры)... Так что я пытаюсь сделать, это схема для "Клиента", и это будут иметь два поля, которые будут иметь вложенные "подполя" и другие, которые могут повторяться. вот что я имею в виду:
let customerModel = new Schema({
firstName: String,
lastName: String,
company: String,
contactInfo: {
tel: [Number],
email: [String],
address: {
city: String,
street: String,
houseNumber: String
}
}
});
tel и email могут быть массивом. и адрес не будет повторяться, но есть некоторые подполя, как вы можете видеть.
Как я могу сделать эту работу?
Ответы
Ответ 1
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: ['[email protected]','[email protected]'],
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}}
);
Ответ 2
// 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 ')
// 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.