Фильтрация по регулярным выражениям в mongoDB

Необходимо сделать выборку значений из документов с подобной структурой

{
    name: '1',
    types: [
        {
            name: '11',
            subtypes: [
                {
                    name: '111',
                },
                {
                    name: '112',
                },
                {
                    name: '113',
                }
            ]
        },
        {
            name: '12',
            subtypes: [
                {
                    name: '111',
                },
                {
                    name: '112',
                },
                {
                    name: '113',
                }
            ]
        }
    ]
}

Необходимо при вводе какой-то строки искать совпадения в types.subtypes.name. их может быть несколько. При этом убрать лишнее все

т.е. при вводе например "111", получить

{
    name: '1',
    types: [
        {
            name: '11',
            subtypes: [
                {
                    name: '111',
                },
            ]
        },
    ]
}

пытаюсь сделать это так, но ничего не выходит

    db.myDB.aggregate([
        { $match:{ 'types.subtypes.name': { $regex: exp }}},
        {
            $project: {
                types: {
                    $filter: {
                        input: "$types",
                        as: "type",
                        cond: {
                            $regexMatch: {
                              input: "$$type.subtypes.name",
                              regex: exp,
                            }
                        }
                    }
                },
                name: 1,
            }
        }
    ])

Подскажите пожалуйста как можно правильно сделать фильтрацию


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