QueryDSL с Spring Data MongoDB - содержит все - PullRequest
0 голосов
/ 03 марта 2019

Я хотел добиться чего-то похожего на contains all, но не смог найти поддержки для mongodb - $ all , поэтому я попытался сделать это вручную.

Мойсущность имеет простой набор tags - Set<String>.

val taskEntity = QTaskEntity.taskEntity
val where = BooleanBuilder()

where.and(taskEntity.tags.contains("a"))
where.and(taskEntity.tags.contains("b"))

Но сгенерированный запрос учитывает только b, a полностью игнорируется.

find using query: { "tags" : "b" }...

Более того: у меня также есть другой фильтр для поиска tasks, который имеет любой из указанных tags (contains any) - он работает с использованием mongodb $in как и ожидалось:

where.and(taskEntity.tags.any().`in`(["a", "b"])))
...
find using query: { "tags" : { "$in" : ["a", "b"] } }

Но если я объединю оба из них, contains any будет проигнорировано, и результат будет таким же, как с первым фрагментом.

Я что-то не так делаюздесь или это ошибка или что-то, что нельзя сделать на стороне mongodb?Может быть, здесь виноват Котлин (сгенерированные классы выглядят нормально для меня)?Это то, что может быть сделано в mongodb только через $all, упомянутый ранее, и querydsl не поддерживает это?

...