我想实现类似于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
将被忽略,其结果与第一个代码段相同。
我在这里做错什么了吗?这是bug还是mongodb上无法完成的事情? Kotlin可能在这里有错吗(生成的类对我来说很好)?仅通过前面提到的$all
可以在mongodb中完成此操作,而querydsl不支持吗?