我有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中是否有一个选项可以让我指定它将自己处理所有事物的关系? 感谢。
答案 0 :(得分:6)
MongoDB不是关系数据库,它是基于文档的数据库。
您可以通过查询TaskSchema并查找所需的用户来获取用户的任务列表。只需确保添加一个索引,这将是一个快速查询:
user: {type: Schema.ObjectId, ref: 'User', index: true}
答案 1 :(得分:4)
详细阐述emostar的答案:
您正在尝试像关系数据库一样使用MongoDB。您正在为用户提供任务列表,但每个任务都引用一个用户。在典型的MongoDB架构中,您将弄清楚如何在应用程序中使用模型,并将文档嵌入有意义的位置(例如,如果用户包含任务数组,则无需任务来获取参考它的所有者 - 只需看看拥有该系列的用户。)