Istnieje kilka sposobów, aby to zrobić. Najprostszym jest właśnie to:
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : Schema.ObjectId
});
Wtedy po prostu trzeba upewnić się, że aplikacja jest piśmie, że identyfikator i używając go w zapytaniach do pobrania „związane” danych w razie potrzeby.
Jest to dobre rozwiązanie, gdy szukają zadań przez ID użytkownika, ale bardziej uciążliwe podczas odpytywania użytkownikowi przez id zadanie:
// 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
}
}
Innym sposobem jest skorzystanie z funkcji populate Mongoose, aby uprościć zapytania. Aby to uzyskać, można wykonać następujące czynności:
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
});
z tym, zapytanie dla wszystkich użytkowników, w tym tablice ich zadań może być:
User.find({}).populate('tasks').run(function(err, users) {
// do something
});
Oczywiście, oznacza to utrzymywanie identyfikatory w obydwa miejsca. Jeśli ci to przeszkadza, najlepiej będzie trzymać się pierwszej metody i po prostu przywyknąć do pisania bardziej złożonych (ale wciąż wystarczająco prostych) zapytań.
Czy łączysz dwie kolekcje lub chcesz je przechowywać na górze zadania? –