gpt4 book ai didi

java - 如何在Java代码中使用JavaMongoRDD的管道提供多阶段?

转载 作者:行者123 更新时间:2023-11-30 02:48:57 25 4
gpt4 key购买 nike

我面临着在java中的JavaMongoRDD.pipeline方法中提供多阶段操作符的问题。

我找到的用于在管道中编写多阶段的Scala代码是

val aggregatedRdd = rdd.withPipeline(Seq(
Document.parse("{ '$match': {'x.t': { '$gte' : 1448908200000}, '$lt': 1448994600000 } }"),
Document.parse("{ '$project': {'_id':0, 'b':'$a.f', 'v':'$a.m', 'q':'$r.q' } }")
))

我尝试过:

String aggregateQuery = "{ $match: {  $and: [{gatewaytime : { $gte : " + startTime
+ ", $lte : " + endTime + " }} , {mac : {$in:" + deviceMacs + "} } ]} }";

JavaMongoRDD<Document> rdd = MongoSpark.load(getJSC());
JavaMongoRDD<Document> aggregatedRdd = rdd
.withPipeline(Collections.singletonList(Document.parse(aggregateQuery)))
.withPipeline(Collections.singletonList(Document.parse("{$sort: {gatewaytime : -1}")));

但不起作用,总是只有最后的管道结果。

不可能在singletonList中提供两个文档解析,那么如何在Java代码中的管道中提供$match$sort

最佳答案

JavaMongoRDD#withPipeline 方法采用 Java List,因此可以按照与 Scala 版本相同的方式使用:

JavaMongoRDD<Document> aggregatedRdd = rdd
.withPipeline(Arrays.asList(Document.parse(aggregateQuery),
Document.parse("{$sort: {gatewaytime : -1}")));

注意:withPipeline 将覆盖任何现有管道,因此您必须将完整管道传递给该方法。

关于java - 如何在Java代码中使用JavaMongoRDD的管道提供多阶段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39305572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com