有几种方法可以做到这一点。最简单的方法只需:
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : Schema.ObjectId
});
然后您只需要确保您的应用程序编写该ID并在必要时在查询中使用它来获取“相关”数据。
当按用户ID搜索任务时,这很好,但按任务ID查询用户时会更加麻烦:
Task.find({user: user_id}, function(err, tasks) {...});
Task.findById(id, function(err, task) {
User.findById(task.user, function(err, user) {
}
}
另一种方法是利用Mongoose的populate特性来简化您的查询。为了实现这个目的,您可以按照以下步骤进行操作:
var UserSchema = new Schema({
name : String,
app_key : String,
app_secret : String,
tasks : [{type: Schema.ObjectId, ref: 'Task'}]
});
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : {type: Schema.ObjectId, ref: 'User'}
});
通过这种方式,您可以查询所有用户,包括他们的任务数组:
User.find({}).populate('tasks').run(function(err, users) {
});
当然,这意味着需要在两个地方都维护id。如果这让你感到困扰,最好还是坚持第一种方法,并逐渐习惯编写更复杂(但仍然足够简单)的查询。