Задать вопрос
@faleaksey

Как написать агрегацию с популяцией данных для следующей модели?

Есть 2 модели (Post и Author) которые передаются с помощью refPath в Data:

Модель Data:
import { model, Schema, Types } from 'mongoose';

const DataSchema = new Schema({
    page: { type: Types.ObjectId, ref: 'Page', required: true },
    instance: {
        type: Schema.Types.ObjectId,
        required: true,
        // Instead of a hardcoded model name in `ref`, `refPath` means Mongoose
        // will look at the `onModel` property to find the right model.
        refPath: 'fields'
    },
    fields: {
        type: String,
        required: true,
        enum: ['Post', 'Author']
    }
});

export const Data = model('Data', DataSchema);


Модель поста и автора:
import { model, Schema, Types } from 'mongoose';

const PostSchema = new Schema({
    title: String
});

export const Post = model('Post', PostSchema);


import { model, Schema, Types } from 'mongoose';

const AuthorSchema = new Schema({
    name: String
});

export const Author = model('Author', AuthorSchema);


есть запрос такого вида
const allData = await Data.find({ page: { $in: [...pages] } }).populate(['instance', 'page']);

но отдаёт всю дату по всем страницам в одном ответе, а по хорошему нужно разбить на группы типа:
[{страница, дата этой сраницы}, {страница, дата этой сраницы}, {страница, дата этой сраницы}]


знаю что можно как-то это решить с помощью агрегации но за последние сутки так и не получилось написать корректный запрос(
!!!ВАЖНО!!! чтобы все данные в массиве были приведены к виду документов (populate)

Решал вопрос с помощью $match, $lookup, $group, $project
но безуспешно(

Как реализовать подобный запрос ?
  • Вопрос задан
  • 42 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Skillbox
    Курс Java-разработчик
    4 месяца
    Далее
  • MongoDB University
    MongoDB Atlas Administrator Path
    1 неделя
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы