模式内的Mongoose模式

我怎样才能添加架构到另一个架构? 这似乎不是有效的:

var UserSchema = new Schema({ name : String, app_key : String, app_secret : String }) var TaskSchema = new Schema({ name : String, lastPerformed : Date, folder : String, user : UserSchema }) 

我检查了网站,它显示了如何声明它为一个数组,但不是单身。

谢谢

有几种方法可以做到这一点。 最简单的就是这样:

 var TaskSchema = new Schema({ name : String, lastPerformed : Date, folder : String, user : Schema.ObjectId }); 

然后,您只需确保您的应用程序正在编写该ID,并在查询中使用该ID来根据需要提取“相关”数据。

当通过用户IDsearch任务时,这是很好的,但通过任务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的填充function来简化查询。 为了得到这个,你可以做到以下几点:

 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。 如果困扰你,最好坚持第一种方法,习惯于编写更复杂(但仍然很简单)的查询。

这个简单的解决scheme呢?

 var TaskSchema = new Schema({ name : String, lastPerformed : Date, folder : String, user : { name : String, app_key : String, app_secret : String } })