Как работает поиск в массиве mongoDB через Spring jpa?
Есть такой пару тысяч объектов по типу такого:
{
"_id" : ObjectId("5ffbfca73fb224209c6d27be"),
"activeStates" : ["logicConnectionLost", ...],
...,
"_class" : "Entity"
}
Мне нужно посчитать количество объектов у которых массив activeStates содержит хотя бы один элемент из входящего массива
Я использую метод репозитория countByActiveStatesIn(Set states);
Сравнивает ли Монго каждый с каждым до конца всех массивов или же пока не найдет первое соответствие? Входящий массив может быть достаточно большим из-за чего запрос к БД может быть 1000-1500мс. Можно ли как-то быстрее посчитать?
Ответы (2 шт):
Попробуйте получать записи пэйдженированно с помощью метода findAll(Pageble pageble), соответственно в размере страницы, при запросе, указывать необходимое количество элементов (например 100) и с каждой итерацией через StreamApi проверять массив внутри объектов
Ускорить можно с помощью индексации, но надо учитывать, что индексированные поля будут где-то храниться и сколько-то занимать памяти.
Можно проиндексировать в классе через аннотацию @Index, либо через MongoDB
db.collectionName.createIndex({"fieldName" : 1})