mongoose

时间:2015-07-04 06:24:38

标签: node.js mongodb

我在mongodb中创建了一个非常嵌套的架构。看起来像这样

{
    "_id": ObjectID("559690ec34c506cea4be1775"),
    "cities": [
        {
            "val": "something",
            "pincode": [
                {
                    "val": "something",
                    "people": [
                        {
                            "val": "something",
                            "frnds": [
                                {
                                    "val": "something1",
                                    "frndaddress": [
                                        {
                                            "val": "something2"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

这个文件在mongodb中正确插入但是我不知道如何转换这是mongoose我用mongoose尝试这个但是它看起来不起作用

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

// create a all city list, without id
var allCitySchema = new Schema({
    cities: [{
        val:{ type: String },
        pincode:[{
                val:{ type: String },
                people:[{
                      val:{ type: String },  
                      frnds:[{
                              val:{ type: String },
                              frndaddress:[{
                                 val:{ type: String },     
                              }]
                      }]  
                }]
        }]
    }]
}, {collection: 'allcities'});

var allcities = mongoose.model('allcities', allCitySchema);
module.exports = allcities;

我是节点和mongodb的新手,我创建了上面的架构,我甚至不知道它的正确与否。

1 个答案:

答案 0 :(得分:1)

我建议您尝试扁平化数据结构。这实际上取决于所有这些字段是如何连接的,但是,根据我的经验,一个好的经验法则是通过引用数组链接mongoDB中的对象是保持关系但仍允许高度解耦信息的好方法。下面是一个如何设置上述模式但仍保留所需关系的示例。 首先是每个城市的架构:

// A Schema for city information
var mongoose = require('mongoose');
var People = require('./people.js');

var City = new mongoose.Schema({
//Pincode for this city object
pincode: { type: String },
// An array of references to the people objects for those who live in this city
people: [{ type: mongoose.Schema.Types.ObjectId, ref: 'People' }]
});

module.exports = mongoose.model('City', City);

然后在一个单独的文件中,为人们构建一个架构:

// A Schema for person information
var mongoose = require('mongoose');
var Friends = require('./people.js');

var Person = new mongoose.Schema({
    //The address of this Person object
    address: { type: String },
    // An array of references to the other people objects who are friends of this person
    friends: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Friends' }]
    });

    module.exports = mongoose.model('People', People);

请注意,朋友也是人物对象。这种数据结构有几个优点。 1)所有字段在数据库中只有一个位置,因此使用最少的磁盘空间,因为很少(仅参考ID)冗余。 2)通过mongoose populationdeep population获取mongoose,通过数据库查询从多个模式中检索信息非常简单。