MongoDB Java Driver 3.0 MapReduce

时间:2015-06-22 11:08:19

标签: mongodb mongodb-java

这是我用来在sourceCollectionName上运行map reduce并将输出提供给targetCollectionName的代码。但是永远不会创建targetCollectionName。

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

虽然我能够将输出作为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
}

2 个答案:

答案 0 :(得分:5)

是的,这是预期的行为。由于MapReduceIterable是一个流畅的接口,因此必须有一些方法来向驱动程序发出信号,告知它实际执行map-reduce的时间,目前唯一的方法是开始迭代。如果你真的不需要结果,并希望缩短迭代次数,你可以调用first()方法(忽略结果),这将返回第一个文档并立即关闭光标目标集合。

答案 1 :(得分:0)

尝试以下操作:

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