java - MongoDB Java 驱动程序 Filters.expr 生成不正确的过滤器表达式

标签 java mongodb mongo-java-driver

我正在尝试构建一个如下所示的过滤器表达式:

{ $expr:{ $gt:['$bal1', '$bal2'] } }

使用 Filter.expr 函数:

Bson filter = Filters.expr( gt("$bal1", "$bal2") );
BsonDocument doc = filter.toBsonDocument(BsonDocument.class, collection.getCodecRegistry());
System.out.println(doc.toJson());

这会生成以下 json:

{ "$expr" : { "$bal1" : { "$gt" : "$bal2" } } }

显然这是不对的。有没有某种方法可以使用 Java 静态导入接口(interface)创建此查询,或者我是否必须手动构造字符串?我是 Mongo 新手,我无法想象每个人都手工构建字符串 - 任何指导将不胜感激。

MongoDB Java驱动程序3.6.1

最佳答案

$expr采用聚合比较函数。所以你不能使用常规的查询生成器。

不幸的是,您只需使用Document.parse来解析聚合比较字符串。

Bson filter = Filters.expr( Document.parse(" { $gt: [ \"$bal1\" , \"$bal2\"] } ") );

比较 query operatorsaggregation comparison operators .

检查实现情况jira了解更多详情。

关于java - MongoDB Java 驱动程序 Filters.expr 生成不正确的过滤器表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48511408/

相关文章:

java - 双括号初始化和序列化

基于返回类型的 Java 泛型转换?

javascript - 从集合中的数组中删除对象[性能/最佳实践/问题]

mongodb - 如何在 Mongo Java 驱动程序 2.13.0 中使用给定的用户名和密码对任何数据库进行身份验证?

java - 如何在 Maven 中包含远程 jar 依赖项

java - 不区分大小写的显式排序 Guava

mysql - 如何在mongodb上对用户数据进行分组

python - 如何根据数组中的值对集合进行排序

java - 为什么 mongo-java-driver 不存在 eq?

java - 使用antlr parsetree将sql查询解析为Java中的mongo bson文档