Давайте брать отличную example от scaryguy с модификацией, как показано ниже:Мангуст «обратный» население, то есть заселение родительского объекта на основании справки, определенной в детской схеме
группа проекта схемы:
var ProjectGroupSchema = new Schema({
projectGroupId : String,
title : String
});
проекта Схема:
var ProjectSchema = new Schema({
title : {type : String, default : '', required : true},
group : {type: String, ref: 'ProjectGroup' },
subscribers : [{type: String, ref: 'User' }]
});
Schema Пользователь:
var UserSchema = new Schema({
userId : {type: String, require: true},
firstName : {type: String, required: true},
lastName : {type: String, required: true},
});
Тогда я могу сделать следующие популяции:
project.findById(req.projectId})
.populate('subscribers')
.populate('group')
.exec(function(err, project){
console.log(project);
});
Обратите внимание, что ссылки на поля не идентификаторы объектов.
В этом примере схема проекта имеет ссылочные поля как для группы проектов, так и для абонентов, что делает возможным такое население.
Что делать, если я хочу получить объект ProjectGroup, который содержит все проекты под этой группой, и каждый проект содержит своих подписчиков?
Я бы сказал, что я ищу «обратную» популяцию, то есть заполнение родительского объекта на основе ссылки, определенной в дочерней схеме. В настоящий момент я использую async для запроса ProjectGroup сначала, а затем запрашиваю проекты на основе projectGroupId.
Спасибо!
Что такое 'projectGroupId'? Идентификатор объекта 'ProjectSchema'? – Chinni
projectGroupId - уникальный идентификатор ProjectGroup в String. –
Может быть, я опаздываю, но вы можете взглянуть на виртуальное население –