Есть несколько способов сделать это. Проще всего это просто:
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
}
}
Другим способом, чтобы воспользоваться функцией 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
});
Конечно, это означает сохранение идентификаторов в оба места. Если это вас беспокоит, лучше всего придерживаться первого метода и просто привыкнуть к написанию более сложных (но все же достаточно простых) запросов.
Вы делаете соединение между двумя коллекциями или хотите сохранить их поверх задачи? –