Nested objects in mongoose schemas
const mongoose = require("mongoose");// Make connection// https://mongoosejs.com/docs/connections.html#error-handlingmongoose.connect("mongodb://localhost:27017/test", { useNewUrlParser: true, useUnifiedTopology: true,});// Define schema// https://mongoosejs.com/docs/models.html#compilingconst AddressSchema = mongoose.Schema({ city: String, street: String, houseNumber: String,});const ContactInfoSchema = mongoose.Schema({ tel: [Number], email: [String], address: { type: AddressSchema, required: true, },});const CustomerSchema = mongoose.Schema({ firstName: String, lastName: String, company: String, connectInfo: ContactInfoSchema,});const CustomerModel = mongoose.model("Customer", CustomerSchema);// Create a record// https://mongoosejs.com/docs/models.html#constructing-documentsconst customer = new CustomerModel({ firstName: "Ashish", lastName: "Suthar", company: "BitOrbits", connectInfo: { tel: [8154080079, 6354492692], email: ["asissuthar@gmail.com", "contact.bitorbits@gmail.com"], },});// Insert customer object// https://mongoosejs.com/docs/api.html#model_Model-savecustomer.save((err, cust) => { if (err) return console.error(err); // This will print inserted record from database // console.log(cust);});// Display any data from CustomerModel// https://mongoosejs.com/docs/api.html#model_Model.findOneCustomerModel.findOne({ firstName: "Ashish" }, (err, cust) => { if (err) return console.error(err); // To print stored data console.log(cust.connectInfo.tel[0]); // output 8154080079});// Update inner record// https://mongoosejs.com/docs/api.html#model_Model.updateCustomerModel.updateOne( { firstName: "Ashish" }, { $set: { "connectInfo.tel.0": 8154099999, }, });
// 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.