Фильтрация по регулярным выражениям в 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,
}
}
])
Подскажите пожалуйста как можно правильно сделать фильтрацию