@kr1337ol

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

Есть такой пару тысяч объектов по типу такого:
{
      "_id" : ObjectId("5ffbfca73fb224209c6d27be"),
      "activeStates" : ["logicConnectionLost", ...],
       ...,
      "_class" : "Entity"
    }

Мне нужно посчитать количество объектов у которых массив activeStates содержит хотя бы один элемент из входящего массива?
Я использую метод репозитория
countByActiveStatesIn(Set states);
Сравнивает ли Монго каждый с каждым до конца всех массивов или же пока не найдет первое соответствие?
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Asapin
В свободное время ковыряюсь с Rust и Wasm
Ответ зависит от того, какой именно запрос сгенерирует Spring Data для метода countByActiveStatesIn(Set states);.

Судя по таблице №16 раздела 15.3 документации Spring Data MongoDB, должен сгенерироваться запрос
db.collectionName.count({ activeStates: { $in: ["logicConnectionLost"] }})

который посчитает все документы, поле activeStates которых содержит хотя бы один элемент из переданного списка.

Какой именно запрос был сгенерирован, можно проверить выставив уровень логирования в DEBUG:
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG

#Если используете реактивный MongoTemplate:
logging.level.org.springframework.data.mongodb.core.ReactiveMongoTemplate=DEBUG
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы