猫鼬深巢的结构

时间:2014-11-03 03:09:47

标签: node.js mongodb mongoose database-schema

Mongo noob在这里。我构建了一个具有很多一对多关系的mongoose模式,这似乎是一个使用嵌套的好机会。我有一个国家"国家"每个国家都有很多州,#34;每个都有很多城市和#34;每个都有很多人。"我想要运行所有不同类型的查询...按国家/地区获取州,将新城市插入州,从城市中删除某人等等。

我如何构建它?我当前的架构如下所示:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema
  ;
var countrySchema = Schema({
    name:   { type: String },
    states: [ { 
        name:   { type: String },
        cities: [ {
            name:   { type: String },
            people: [ {
                name: { type: String }
            } ]
        } ]
    } ]
});

对我而言,这是有道理的。我可能会基于深嵌套来拉实体,所以这种嵌套模式应该给我一个重度加入的关系数据库赢得的性能优势(对吧?)。

然而,这是非常难看的。我也看到了这种架构构造的风格:

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

var countrySchema = mongoose.schema({
    name:   { type: String },
    states: [ { type: ObjectId, ref: State } ]
});
var stateSchema = mongoose.schema({
    name:   { type: String },
    cities: [ { type: ObjectId, ref: City } ]
});
var citySchema = mongoose.schema({
    name:   { type: String },
    persons: [ { type: ObjectId, ref: Person } ]
});
var personSchema = mongoose.schema({
    name:   { type: String },
});

var Country = mongoose.model('Country', countrySchema)
  , State   = mongoose.model('State', stateSchema)
  , City    = mongoose.model('City', citySchema)
  , Person  = mongoose.model('Person', personSchema)
  ;

这是一个更好的方法吗?它看起来更具可读性,但我认为它也没有表现出来。

0 个答案:

没有答案