如何使用关系更好地构建猫鼬模式



目前我有4个模型。用户、配置文件、兴趣和令牌。用户和概要文件之间是一对一的关系。在User和令牌之间存在一对多的关系。在个人资料和兴趣之间也存在一对多的关系,兴趣将被预先定义,管理员可以在以后添加更多的兴趣。

用户

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'}
    });

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

谢谢。

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

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

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);
嵌入式文件

最新更新