2016-02-17 4 views
0

У меня есть схема, как это для семьи (дети которых учатся в школе) ...Mongoose схемы для массива поддокументов идентификаторов из другой коллекции

var familySchema = new Schema({ 
    parents: [{ 
     firstName: String, 
     lastName: String, 
     email: String, 
    }], 
    students: [{ 
     firstName: String, 
     lastName: String, 
     grade: Number, 
    }] 
}); 

Я хотел бы, чтобы описать многие школы, которые содержат классы, и имеют классы содержат студент, что-то вроде этого ...

var schoolSchema = new Schema({ 
    name: String, 
    street: String, 
    classrooms: [{ 
     classroomNumber: Number, 
     students: [ /* I am mixed up here */ ] 
    }] 
}); 

Как узнать, мангусту, что я хочу массив объектов идентификаторов для студентов найти в другой коллекции?

Я понимаю from this answer, что, если бы я хотел классные комнаты, чтобы обратиться к семейным документам, я мог бы сказать что-то вроде:

families: { type : ObjectId, ref: 'Family' } 

но как сделать то же самое для подразделам -documents другой коллекции? (Если это не очевидно, я просто изучаю как манго, так и мангуста).

ответ

1

Если вы хотите использовать поддокументы reference, вам необходимо сменить вашу ссылку на массив 'student'.

var studentSchema = new Schema({ 
    firstName: String, 
    lastName: String, 
    grade: Number, 
}); 

var familySchema = new Schema({ 
    parents: [{ 
     firstName: String, 
     lastName: String, 
     email: String, 
    }], 
    students: [studentSchema] 
}); 

var schoolSchema = new Schema({ 
    name: String, 
    street: String, 
    classrooms: [{ 
     classroomNumber: Number, 
     students: [ { type: ObjectId, ref: 'Family.students' }] 
    }] 
}); 

var Student = mongoose.model('Student', studentSchema); 
var Family = mongoose.model('Family ', familySchema); 
var School = mongoose.model('School', schoolSchema); 
+0

Отличный ответ. Огромное спасибо. – user1272965

+0

Эй, извините за продолжение: Я следую примеру, где у меня есть один файл на модель, и каждый файл модели говорит 'module.exports = mongoose.model ('Model', ModelSchema);' в конце. Итак, в моей family.js можно ли просто называть 'mongoose.model ('Student' ...' на ученике и отбрасывать результат (так что я все еще могу экспортировать семейную модель)? И, в моем school.js, Я хочу, чтобы любые другие файлы модели использовали синтаксис, который вы предлагаете? – user1272965

+0

@ user1272965, в каждом файле модели вы можете использовать 'mongoose.model ('Model', ModelSchema);', если вы хотите использовать этот файл модели в другом файле , вы должны использовать 'var School = mongoose.model ('School');', тогда эту «школу» можно было бы использовать в этом файле ... Надеюсь, что я буду ясно. – zangw