Мне нужно запросить следующие данные из mongodb:
Проект имеет много регионов, регион имеет много ссылок
Вот данные:
{ "_id" : ObjectId( "4f26a74f9416090000000003" ),
"description" : "A Test Project",
"regions" : [
{ "title" : "North America",
"_id" : ObjectId( "4f26a74f9416090000000004" ),
"links" : [
{ "title" : "A Really Cool Link" } ] },
{ "description" : "That Asia Place",
"title" : "Asia",
"_id" : ObjectId( "4f26b7283378ab0000000003" ),
"links" : [] },
{ "description" : "That South America Place",
"title" : "South America",
"_id" : ObjectId( "4f26e46b53f2f90000000003" ),
"links" : [] },
{ "description" : "That Australia Place",
"title" : "Australia",
"_id" : ObjectId( "4f26ea504fb2210000000003" ),
"links" : [] } ],
"title" : "Test" }
Вот мои настройки модели:
// mongoose
var Link = new Schema({
title : String
, href : String
, description : String
});
var Region = new Schema({
title : String
, description : String
, links : [Link]
});
var Project = new Schema({
title : String
, description : String
, regions : [Region]
});
mongoose.model('Link', Link);
mongoose.model('Region', Region);
mongoose.model('Project', Project);
var Link = mongoose.model('Link');
var Region = mongoose.model('Region');
var Project = mongoose.model('Project');
Запрос, с которым я борюсь, возвращает один объект региона, соответствующий идентификатору. Я в порядке, возвращая все регионы со всеми соответствующими ссылками, но ограничив его идентификатором только один регион был проблемой.
Вот мой сломанный маршрут, с которым я работаю:
app.get('/projects/:id/regions/:region_id', function(req, res){
Project.findById(req.param('id'), function(err, project) {
if (!err) {
project.regions.findById(req.params.region_id, function(err, region) {
if (!err) {
res.render('project_regions', {
locals: {
title: project.title,
project: project
}
});
}
});
} else {
res.redirect('/')
}
});
});
Я знаю, что вышеупомянутое не будет работать, потому что объект, возвращаемый "findById", не отвечает на findByID, но он иллюстрирует то, что я пытаюсь сделать. Я пытался выполнить пользовательский запрос, но он всегда возвращал весь документ, а не тот регион, который мне нужен.
Я также попытался выполнить запрос непосредственно из схемы региона, но это не дает никаких результатов. Я предполагаю, что для запроса из Схемы, которая является поддокументом, я должен был бы контекстуально предоставить, что является родительским документом.
Другими словами, следующее не возвращает объект «регион» с данными:
app.get('/projects/:id/regions/:region_id', function(req, res){
Region.findById(req.params.region_id, function(err, region) {
if (!err) {
res.render('project_regions_show', {
locals: {
title: "test",
region: region
}
});
} else {
res.redirect('/')
}
});
});
Ценю любую помощь.