@likejavascript

Как сгруппировать документы в MongoDB/mongoose?

Есть следующая структура моделей:

//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'
                }
             ]
          }
       ]
    }
  • Вопрос задан
  • 2850 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы