Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongooseJS模式关系_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript MongooseJS模式关系

Javascript MongooseJS模式关系,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有如下MongooseJS模式: var UserSchema = new Schema({ name : String, app_key : String, app_secret : String, tasks : [{ type : Schema.ObjectId, ref : 'Task'}] }) var ActionSch

我有如下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'}
})
问题是,当我设置任务的用户时,我是否也必须手动转到该用户并在那里添加任务?这似乎是额外的工作(冗余),mongoosejs中是否有一个选项允许我指定它将自己处理所有事情的关系?
谢谢。

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

通过查询TaskSchema并查找所需的用户,可以获得用户的任务列表。只需确保添加索引,即可快速查询:

user: {type: Schema.ObjectId, ref: 'User', index: true}

要详细说明emostar的答案:


您试图像使用关系数据库一样使用MongoDB。您为用户提供了一个任务列表,但每个任务都引用了一个用户。在一个典型的MongoDB模式中,您将了解如何在应用程序中使用模型,并在有意义的地方嵌入文档(例如,如果用户包含一系列任务,则任务无需引用其所有者,只需查看拥有集合的用户即可)。

如何创建新任务并与用户关联?