有几种方法可以做到这一点。最简单的就是这样:
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : Schema.ObjectId
});
然后您只需要确保您的应用正在写入该 id 并在查询中使用它以在必要时获取“相关”数据。
这在通过用户 id 搜索任务时很好,但在通过任务 id 查询用户时更麻烦:
// Get tasks with user id
Task.find({user: user_id}, function(err, tasks) {...});
// Get user from task id
Task.findById(id, function(err, task) {
User.findById(task.user, function(err, user) {
// do stuff with user
}
}
另一种方法是利用 Mongoose 的 populate 功能来简化您的查询。为此,您可以执行以下操作:
var UserSchema = new Schema({
name : String,
app_key : String,
app_secret : String,
tasks : [{type: Schema.ObjectId, ref: 'Task'}] // assuming you name your model Task
});
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : {type: Schema.ObjectId, ref: 'User'} // assuming you name your model User
});
这样,您对所有用户的查询,包括他们的任务数组可能是:
User.find({}).populate('tasks').run(function(err, users) {
// do something
});
当然,这意味着在两个地方都维护 id。如果这让您感到困扰,最好还是坚持第一种方法,然后习惯于编写更复杂(但仍然足够简单)的查询。