以下查询不会返回任何结果:
val names = mutableListOf("toto")
Criteria().orOperator(
mutableListOf(
Criteria("fieldA.name").`in`(names),
Criteria("fieldB.name").`in`(names)
)
)
但我知道一些结果应该已经返回。此外,以下查询返回一些结果:
Criteria().orOperator(
mutableListOf(
Criteria("fieldA.name").`is`(names[0]),
Criteria("fieldB.name").`is`(names[0])
)
)
在日志中,我可以看到: 执行计数: { "$or" : [{ "fieldA.urn" : { "$in" : [["toto"]]}}, { "fieldB.urn" : { "$in" :集合中的[["toto"]]}}]}:字段
双括号对我来说似乎不“正常”。我相信这是一个错误。你能确认一下吗? 与 org.springframework.boot:spring-boot-starter-data-mongodb:2.7.9、org.springframework.data:spring-data-mongodb:3.4.8 和 org.mongodb:mongodb-driver-core:4.10 相同。 2
我尝试使用这个标准:
Criteria
.where("fieldA.name").`in`(names)
.orOperator(Criteria.where("fieldB.name").`in`(names))
但正如预期的那样,日志记录显示相同的 mongodb 查询。
谢谢, 瓦尔
Criteria
类为$in
运算符提供了两个重载函数。这些是:
in(Object... values)
和 in(Collection<?> values)
一个采用可变参数,另一个采用值的集合。从查询日志中可以清楚地看出,您的调用正在解析为该函数的
varargs
版本,并且将您传递的参数视为一个列表元素。要解决此问题,您可以尝试将列表分散到可变参数,如下所示:
val names = mutableListOf("toto")
Criteria().orOperator(
mutableListOf(
Criteria("fieldA.name").`in`(*names.toTypedArray()),
Criteria("fieldB.name").`in`(*names.toTypedArray())
)
)