如何更好地构建具有关系的mongoose模式

时间:2016-08-21 10:01:16

标签: node.js mongodb mongoose mongoose-schema

目前我有4个型号。用户,个人资料,兴趣和令牌。在用户和个人资料之间存在一对一的关系。在用户和令牌之间存在一对多的关系。在个人资料和兴趣之间还存在一对多关系,兴趣将通过管理员稍后添加更多内容来预先定义。

用户

var UserSchema = new Schema({

    email: {
        type: String,
        lowercase: true,
        unique: true,
        required: true
    },

    phone: [{countrycode: String}, {number: String}],

    tokens: [{type: Schema.Types.ObjectId, ref: 'Token'}],

    profile: {
        type: Schema.Types.ObjectId, ref: 'Profile'
    },
},
{
    timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}
});

资料

var ProfileSchema = new Schema({

        username: {

            type: String,
            unique: true,
        },

        firstname: {

            type: String
        },

        lastname: {

            type: String
        },

        gender: {

            type: String
        },

        dob: {

            type: Date
        },

        country: {

            type: String
        },

        city: {

            type: String
        },

        avatar: {
            type: String
        },

        about: {
            type: String
        },

        interests: [{
            type: Schema.Types.ObjectId,
            ref: 'Interest'

        }],

    },
    {
        timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}
    });

令牌

var TokenSchema = new Schema({

        name: {
            type: String,
        },
        value: {
            type: String,
        },
    },
    {
        timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}
    });

兴趣

var InterestSchema = new Schema({

        name: {
            type: String,
            unique: true,
        },
    },
    {
        timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}
    });

我是否正确设置了这些方案/关系?现在,如果我想给用户一个角色,我会创建一个新的角色模式吗?

感谢。

2 个答案:

答案 0 :(得分:0)

如果你想在NoSQL db中建立关系,我认为你需要Relational数据库

答案 1 :(得分:0)

您无法在NoSQL中添加关系。你唯一能做的就是在另一个模式中使用模式作为字段类型,比如

var Comments = new Schema({
  title: String,
  body: String,
  date: Date
});

var BlogPost = new Schema({
  author: ObjectId,
  title: String,
  body: String,
  date: Date,
  comments: [Comments],
  meta: {
    votes : Number,
    favs  : Number
  }
});

mongoose.model('BlogPost', BlogPost);

Embedded Documents