Объединение вложенных структур

идея такова: есть список уроков

{
    "_id": {
        "$oid": "615306ebf1b59f75e1eeae01"
    },
    "index": 1,
    "number": "1",
    "title": "***Заголовок1***",
    "units": [{
        "$oid": "6155a0d3f1b59f75e1eeae3c"
    }, {
        "$oid": "6155b7e6f1b59f75e1eeae5a"
    }]
}
{
    "_id": {
        "$oid": "61547ca9f1b59f75e1eeae1a"
    },
    "index": 2,
    "number": "2",
    "title": "***Заголовок2***",
    "units": [{
        "$oid": "6155bb54f1b59f75e1eeae62"
    }]
}
...

и есть список групп:

{
    "_id": {
        "$oid": "610bb2e8f21c6bdd28ed86ae"
    },
    "title": "1.17.21",
    "lessons": [{
        "_id": {
            "$oid": "615306ebf1b59f75e1eeae01"
        },
        "open_date": {
            "$date": "2021-05-09T21:00:00.000Z"
        },
        "title": "new title",
        "units": [{
            "id": {
                "$oid": "615c4edbf1b59f75e1eeaefc"
            }
        }]
    }, {
        "_id": {
            "$oid": "61547ca9f1b59f75e1eeae1a"
        },
        "open_date": {
            "$date": "2021-06-09T21:00:00.000Z"
        }
    }]
},
...

в списке групп, в каждом объекте есть массив lessons в котором ссылка на урок и дата открытия кроме этого в объекте lesson есть массив units, это массив блоков в уроке в итоге есть базовый урок есть группа с уроками и похожей структурой, дополняющей и изменяющей базовый урок

необходимо наложить на структуру базового урока который вставляется по id (groups.lessons._id) информацию из структуры groups.lessons, которая может дополнять или изменять базовый урок

{
    "_id": {
        "$oid": "610bb2e8f21c6bdd28ed86ae"
    },
    "title": "1.17.21",
    "lessons": [{
        "_id": {
            "$oid": "615306ebf1b59f75e1eeae01"
        },
        "open_date": {
            "$date": "2021-05-09T21:00:00.000Z"
        },
        "index": 1,
        "number": "1",
        "title": "new title",
        "units": [{
            "id": {
                "$oid": "615c4edbf1b59f75e1eeaefc"
            }
        }, {
            "id": {
                "$oid": "6155a0d3f1b59f75e1eeae3c"
            }
        }, {
            "id": {
                "$oid": "6155b7e6f1b59f75e1eeae5a"
            }
        }]
    }, {
        "_id": {
            "$oid": "61547ca9f1b59f75e1eeae1a"
        },
        "open_date": {
            "$date": "2021-06-09T21:00:00.000Z"
        }
    }]
},
...

изменился title и добавилось 2 объекта в units, далее в units может быть другой массив units и неплохо на них тоже наложить маску

получается это что-то вроде наследования или прототипов в js

вопрос, как это реализовать через Aggregations Pipelines?


Ответы (0 шт):