Есть 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
но безуспешно(
Как реализовать подобный запрос ?