Я хотел добиться чего-то похожего на 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 не поддерживает это?