有几种方法可以做到这一点。最简单的就是这样:
var TaskSchema = new Schema({ name : String, lastPerformed : Date, folder : String, user : Schema.ObjectId});然后,您只需确保您的应用程序正在编写该ID,并在查询中使用该ID即可根据需要提取“相关”数据。
按用户ID搜索任务很好,但按任务ID查询用户则比较麻烦:
// Get tasks with user idTask.find({user: user_id}, function(err, tasks) {...});// Get user from task idTask.findById(id, function(err, task) { User.findById(task.user, function(err, user) { // do stuff with user }}另一种方法是利用Mongoose的填充功能来简化查询。为此,您可以执行以下操作:
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。如果让您感到困扰,那么最好坚持第一种方法,并习惯于编写更复杂(但仍然足够简单)的查询。



