Есть следующая структура моделей:
//Unit.js
var mongoose = require('mongoose');
module.exports = mongoose.model('Unit', new mongoose.Schema({
title: {type: String},
_folder: {type: mongoose.Schema.Types.ObjectId, ref: 'Folder'}
}));
//Folder.js
var mongoose = require('mongoose');
module.exports = mongoose.model('Folder', new mongoose.Schema({
title: {type: String}
}));
//Document.js
var mongoose = require('mongoose');
module.exports = mongoose.model('Document', new mongoose.Schema({
title: {type: String},
folders: [{type: mongoose.Schema.Types.ObjectId, ref: 'Folder'}]
}));
Каждый документ содержит массив folders (папок).
Есть unit (элементы), каждый из которых относится к определенной папке и связывается по _folder. Мне необходимо запросить документ по _id и получить все его папки и события. Остановился на этом:
app.get('/document/:id', function(req, res, next) {
return Document.findOneById(req.params.id)
.populate('folders')
.exec(function (err, document) {
if (err) return next(err);
// здесь нужно наполнить массив document.folders соответствующими элементами (units)
});
});
Помогите закончить запрос, нужно наполнить массив document.folders соответствующими элементами (units). Я так понимаю, что нужно использовать aggregate, но не понимаю как правильно составить запрос, чтобы в конечном итоге получить вот документ:
{
_id: ObjectId(...),
title: 'Document title',
folders: [
{
_id: ObjectId(...),
units: [
{
_id: ObjectId(...),
title: 'Unit title'
}
]
}
]
}