Ответ 1
Есть несколько способов сделать это. Самое простое:
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : Schema.ObjectId
});
Тогда вам просто нужно убедиться, что ваше приложение записывает этот идентификатор и использует его в запросах для получения "связанных" данных по мере необходимости.
Это хорошо при поиске задач по идентификатору пользователя, но более громоздко при запросе пользователя по идентификатору задачи:
// 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
});
Конечно, это означает сохранение идентификаторов в обоих местах. Если это вас беспокоит, лучше всего придерживаться первого метода и просто привыкнуть к написанию более сложных (но все же достаточно простых) запросов.