【问题标题】:How can I make schema Given output using mongoose?如何使用猫鼬制作模式给定输出?
【发布时间】:2016-01-22 15:06:02
【问题描述】:

我已经为此给出了我的输出,我该如何制作架构。任何人为此举个例子,我也添加了我的架构

我的输出代码:

 $scope.countries = [{
            "name": "India",
                "states": [{
                "name": "Maharashtra",
                    "cities": [{
                    "name": "Pune"
                }, {
                    "name": "Mumbai"
                }, {
                    "name": "Nagpur"
                }, {
                    "name": "Akola"
                }]
            }, {
                "name": "Madhya Pradesh",
                    "cities": [{
                    "name": "Indore"
                }, {
                    "name": "Bhopal"
                }, {
                    "name": "Jabalpur"
                }]
            }, {
                "name": "Rajasthan",
                    "cities": [{
                    "name": "Jaipur"
                }, {
                    "name": "Ajmer"
                }, {
                    "name": "Jodhpur"
                }]
            }]
        }, {
            "name": "USA",
                "states": [{
                "name": "Alabama",
                    "cities": [{
                    "name": "Montgomery"
                }, {
                    "name": "Birmingham"
                }]
            }, {
                "name": "California",
                    "cities": [{
                    "name": "Sacramento"
                }, {
                    "name": "Fremont"
                }]
            }, {
                "name": "Illinois",
                    "cities": [{
                    "name": "Springfield"
                }, {
                    "name": "Chicago"
                }]
            }]
        }, {
            "name": "Australia",
                "states": [{
                "name": "NewSouthWales",
                    "cities": [{
                    "name": "Sydney"
                }]
            }, {
                "name": "Victoria",
                    "cities": [{
                    "name": "Melbourne"
                }]
            }]
        }];

这是我的路线:

app.route('/address')
        .get(address.list)
        .post(address.create);

控制器代码:

/**
 * Create a address
 */
exports.create = function(req, res) {
    var address = new Address(req.body);
    address.user = req.user;

    address.save(function(err) {
        if (err) {
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        } else {
            res.json(address);
        }
    });
};

架构代码:

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var citySchema = {
    name: {type:String, required: false}
};

citySchema  = 'new Schema('+ citySchema +',{_id:false})';
var stateSchema = {
    name: {type:String, required: false},
    cities: [citySchema], default:[]
};
stateSchema  = 'new Schema('+stateSchema +',{_id:false})';

var countrySchema = {
    name: {type:String, required: false},
    states: [stateSchema], default:[]

};
// dbObj is mongoose connection object
var collectionObj = dbObj.model('countries', countrySchema);

我已经更新了我的路由和控制器架构。如何更改以插入该对象请给出一些建议?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    请尝试以下架构:-

    var citySchema = {
        name: {type:String, required: false}
    };
    
    citySchema  = 'new Schema('+ citySchema +',{_id:false})';
    var stateSchema = {
        name: {type:String, required: false},
        cities: [citySchema], default:[]
    };
    stateSchema  = 'new Schema('+stateSchema +',{_id:false})';
    
    var countrySchema = {
        name: {type:String, required: false},
        states: [stateSchema], default:[]
    
    };
    // dbObj is mongoose connection object
    var collectionObj = dbObj.model('countries', countrySchema);
    

    现在,如果您想将任何单个国家/地区数据插入数据库,请按照以下步骤操作-

    // Let us assume that we need to insert following data first
    
        var data = {
            "name": "India",
            "states": [{
                    "name": "Maharashtra",
                    "cities": [{
                            "name": "Pune"
                        }, {
                            "name": "Mumbai"
                        }, {
                            "name": "Nagpur"
                        }, {
                            "name": "Akola"
                        }]
                }, {
                    "name": "Madhya Pradesh",
                    "cities": [{
                            "name": "Indore"
                        }, {
                            "name": "Bhopal"
                        }, {
                            "name": "Jabalpur"
                        }]
                }, {
                    "name": "Rajasthan",
                    "cities": [{
                            "name": "Jaipur"
                        }, {
                            "name": "Ajmer"
                        }, {
                            "name": "Jodhpur"
                        }]
                }]
        };
    
    
    // add country 
    
    var insertObj = {
        "name": "India",
        "states": []
    }
    countryModel.create(insertObj, function (err, job) {
        cb(err, job);
    });
    
    // add states 
    
        var states = [{
                "name": "Maharashtra",
                "cities": []
            }, {
                "name": "Madhya Pradesh",
                "cities": []
            }, {
                "name": "Rajasthan",
                "cities": []
            }];
        var stateCond = {"name": "India"};
        var stateUpdate = {$push: {states: states}};
        var stateOpts = {};
        countryModel.findOneAndUpdate(stateCond, stateUpdate, stateOpts, function (err, resp) {
            cb(err, resp);
        });
    
    // Now if you want to add "Maharastra" Cities 
    
        var cities = [{
                "name": "Pune"
            }, {
                "name": "Mumbai"
            }, {
                "name": "Nagpur"
            }, {
                "name": "Akola"
            }]
    
        var cityCond = {"name": "India", "states.name": "Maharashtra"};
        var cityUpdate = {$push: {cities: cities}};
        var cityOpts = {};
        countryModel.findOneAndUpdate(cityCond, cityUpdate, cityOpts, function (err, resp) {
            cb(err, resp);
        });
    
    // Now same insertion query need to be run for "Madhya Pradesh" and "Rajasthan"
    

    谢谢

    【讨论】:

    • 我有一个疑问,如果我描述我需要如何插入值请给出一些例子
    • 实际上我是这项技术的新手,我不知道如何插入这种类型的模式
    • 请你帮我解决这个问题。
    • 请检查我已根据您的建议修改的更新问题,但我仍然感到困惑
    猜你喜欢
    • 2016-05-17
    • 2015-11-08
    • 2020-10-29
    • 1970-01-01
    • 2021-04-23
    • 2021-10-06
    • 2018-01-21
    • 2016-08-05
    • 2020-06-29
    相关资源
    最近更新 更多