Как работает поиск в массиве mongoDB через Spring jpa?

Есть такой пару тысяч объектов по типу такого:

{
  "_id" : ObjectId("5ffbfca73fb224209c6d27be"),
  "activeStates" : ["logicConnectionLost", ...],
  ...,
  "_class" : "Entity"
}

Мне нужно посчитать количество объектов у которых массив activeStates содержит хотя бы один элемент из входящего массива

Я использую метод репозитория countByActiveStatesIn(Set states);

Сравнивает ли Монго каждый с каждым до конца всех массивов или же пока не найдет первое соответствие? Входящий массив может быть достаточно большим из-за чего запрос к БД может быть 1000-1500мс. Можно ли как-то быстрее посчитать?


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

Автор решения: uncle_gaspacho

Попробуйте получать записи пэйдженированно с помощью метода findAll(Pageble pageble), соответственно в размере страницы, при запросе, указывать необходимое количество элементов (например 100) и с каждой итерацией через StreamApi проверять массив внутри объектов

→ Ссылка
Автор решения: mesfex

Ускорить можно с помощью индексации, но надо учитывать, что индексированные поля будут где-то храниться и сколько-то занимать памяти.

Можно проиндексировать в классе через аннотацию @Index, либо через MongoDB

db.collectionName.createIndex({"fieldName" : 1})
→ Ссылка