MongoDB Java 驱动程序 Filters.expr 产生了不正确的过滤器表达式
MongoDB Java driver Filters.expr produces incorrect filter expression
我正在尝试构建一个如下所示的过滤器表达式:
{ $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 静态导入接口创建此查询,还是我必须手动构造字符串?我是 Mongo 的新手,我无法想象每个人都在手工构建字符串 - 任何指导将不胜感激。
MongoDB Java 驱动程序 3.6.1
$expr
采用聚合比较函数。所以你不能使用常规查询生成器。
不幸的是,您只需要使用Document.parse
来解析聚合比较字符串。
Bson filter = Filters.expr( Document.parse(" { $gt: [ \"$bal1\" , \"$bal2\"] } ") );
比较query operators
vs aggregation comparison operators
.
查看实施 jira 了解更多详情。
我正在尝试构建一个如下所示的过滤器表达式:
{ $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 静态导入接口创建此查询,还是我必须手动构造字符串?我是 Mongo 的新手,我无法想象每个人都在手工构建字符串 - 任何指导将不胜感激。
MongoDB Java 驱动程序 3.6.1
$expr
采用聚合比较函数。所以你不能使用常规查询生成器。
不幸的是,您只需要使用Document.parse
来解析聚合比较字符串。
Bson filter = Filters.expr( Document.parse(" { $gt: [ \"$bal1\" , \"$bal2\"] } ") );
比较query operators
vs aggregation comparison operators
.
查看实施 jira 了解更多详情。