Nested objects in mongoose schemas

青春壹個敷衍的年華 提交于 2019-12-29 17:36:12

问题


i've seen many answers to this question here, but i still don't get it (maybe because they use more "complex" examples)... So what im trying to do is a schema for a "Customer", and it will have two fields that will have nested "subfields", and others that may repeat. here is what i mean:

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

tel and email might be an array. and address will not be repeated, but have some sub fields as you can see.

How can i make this work?


回答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: ['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}}
    );



回答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.


来源:https://stackoverflow.com/questions/39596625/nested-objects-in-mongoose-schemas

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!