如何使用Java Mongodb';s AggregateToCollectionOperation类?

如何使用Java Mongodb';s AggregateToCollectionOperation类?,java,mongodb,Java,Mongodb,我有一个mongoshell命令,需要将其转换为Java代码。 看起来驱动程序API的变化如此频繁,以至于我在网上看到的任何示例都不使用这种方法。我正在使用最新的3.2.4版本的驱动程序 db.ff1987_2gram.aggregate([ { $group: { _id : { "cw1" : "$cw1", "target" : "$target" },

我有一个mongoshell命令,需要将其转换为Java代码。 看起来驱动程序API的变化如此频繁,以至于我在网上看到的任何示例都不使用这种方法。我正在使用最新的3.2.4版本的驱动程序

db.ff1987_2gram.aggregate([ 
   { 
       $group: { 
           _id : { 
               "cw1" : "$cw1", 
               "target" : "$target"
           }, 
           "count" : {"$sum" : 1 }  
       }
  },
  {$out : "ff1987_2gram_c"} 
], { allowDiskUse:true} )

有我想做的事。但是它的execute方法接受一个WriteBinding接口对象。这是通过ClusterBinding、SingleServerBinding实现的。但我没有使用这两个。我已使用新的MongoClient类连接到数据库

虽然这并没有回答我最初的问题,但下面是一个不错的解决办法。我想自从引入MongoClient以来,这是一个不推荐使用的类

不要使用AggregateToCollectionOperation,而是使用一个带有$out的阶段的普通聚合操作,就像mongoshell命令一样。但是请记住,除非迭代返回的iterable,否则该命令实际上不会执行。(可能在第一个元素之后中断就足够了。检查后将更新)。下面是一个例子

List<Document> pipeline = new ArrayList<>();
...
Document group = new Document("$group", groupargs);
pipeline.add(group);
...
//Relevant line
pipeline.add(new Document("$out", collectionname));
AggregateIterable<Document> docs = db.getCollection(collection).aggregate(pipeline).allowDiskUse(true);
for (Document d : docs) {}
List pipeline=new ArrayList();
...
文档组=新文档(“$group”,groupargs);
管道。添加(组);
...
//相关线路
添加(新文档(“$out”,collectionname));
AggregateItableDocs=db.getCollection(collection).aggregate(pipeline).allowDiskUse(true);
(文件d:docs){}