Я пытаюсь создать запрос MongoDB, в котором я могу искать список объектов, которые все содержат несколько вложенных массивов объектов, для одного, где свойство на самом низком уровне содержит часть строки.
Это общая структура этих объектов:
{
"name": "Foo"
"structure": {
"configs":[
{
"combinations": [
{
"title": "item1"
},
{
"title": "item2"
}
]
},
{
"combinations": [
{
"title": "item3"
},
{
"title": "item4"
}
]
}
]
}
}
Теперь, когда я ищу "item1" или просто "1", я бы хотел, чтобы этот пример объекта был возвращен,потому что первый массив combinations
содержит объект с заголовком item1
. Поскольку я собираю приложение в Spring boot, обычно запросы могут легко обрабатываться обычным высоким уровнем findAllByPropertyMatching(String searchTerm)
в классе репозитория. Из-за своей сложности это не работает в этом случае, и я действительно борюсь с тем, как это сделать.
Я попробовал пользовательский запрос ...
@Query(value = "{'structure.configs.$[].combination.$[].title': {$regex : ?0, $options: 'i'}}")
public List<Item> findAllByStructuregMatchesRegex(String query);
... но, очевидно, он имеет несколько проблем.
Поскольку данные загружаются из внешнего источника,Я не могу изменить основную структуру данных. Я также не могу кэшировать все элементы и фильтровать их с помощью логики Java, потому что набор данных слишком велик.
Кто-нибудь может указать мне правильное направление? Я очень признателен за вашу помощь, большое спасибо!