Есть несколько способов сделать это. Самое простое вот это:
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 заполнять, чтобы упростить ваши запросы. Чтобы получить это, вы можете сделать следующее:
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
});
Конечно, это означает сохранение идентификаторов в обоих местах. Если вас это беспокоит, возможно, лучше придерживаться первого метода и просто привыкнуть к написанию более сложных (но все же достаточно простых) запросов.
person
glortho
schedule
05.01.2012