MongooseJS架构关系

0xS*_*ina 3 javascript mongoose mongodb node.js

我有MongooseJS架构如下:

var UserSchema = new Schema({
    name            : String,
    app_key         : String,
    app_secret      : String,
    tasks           : [{ type   : Schema.ObjectId, 
                            ref : 'Task'}]
})

var ActionSchema = new Schema({
    name            : String,
    description     : String,
    module          : String
})

var enumTaskState = ['New', 'Indexing', 'Idle', 'In Queue', 'Working'];
var TaskSchema = new Schema({
    name            : String,
    lastPerformed   : Date,
    folder          : String,
    actions         : [{type    : Schema.ObjectId, 
                        ref     : 'Task'}],
    user            : { type    : Schema.ObjectId, 
                        ref     : 'User'},
    status          : { type    : String,
                        enum    : enumTaskState,
                        default : 'New'}
})
Run Code Online (Sandbox Code Playgroud)

问题是,当我设置任务的用户时,我是否必须手动转到用户并在那里添加任务?这似乎是额外的工作(冗余),mongoosejs中是否有一个选项可以让我指定它将自己处理所有事物的关系?谢谢.

sta*_*er2 6

MongoDB不是关系数据库,它是基于文档的数据库.

您可以通过查询TaskSchema并查找所需的用户来获取用户的任务列表.只需确保添加一个索引,这将是一个快速查询:

user: {type: Schema.ObjectId, ref: 'User', index: true}
Run Code Online (Sandbox Code Playgroud)