MongoDB Java Driver 3.0 MapReduce

Har*_*hil 3 mongodb mongodb-java

这是我用来运行map reduce on sourceCollectionName和获取输出的代码targetCollectionName.但是永远不会创建targetCollectionName.

 new MongoClient("localhost").getDatabase(dbName).getCollection(sourceCollectionName)
                .mapReduce(map, reduce)
                    .action(MapReduceAction.REPLACE)
                    .databaseName(dbName)
                    .collectionName(targetCollectionName)
                    .sharded(false);
Run Code Online (Sandbox Code Playgroud)

虽然我能够MapReduceIterable在迭代时获得输出,但结果会按预期转储.这是正确的方法吗?

MapReduceIterable mapReduceIterable = new MongoClient("localhost").getDatabase(dbName).getCollection(sourceCollectionName)
                .mapReduce(map, reduce)
                    .action(MapReduceAction.REPLACE)
                    .databaseName(dbName)
                    .collectionName(targetCollectionName)
                    .sharded(false);

for(Object o:mapReduceIterable){
     //Just Iterating makes map reduce to dump output collection
}
Run Code Online (Sandbox Code Playgroud)

jye*_*min 5

是的,这是预期的行为.由于MapReduceIterable是一个流畅的接口,必须有一些方法来通知驱动程序它是时候实际执行map-reduce,而目前唯一的方法就是开始迭代.如果您确实不需要结果,并希望快速迭代,则可以调用first()方法(忽略结果),这将返回第一个文档并立即关闭目标集合上的光标.