1

下面的代码片段在 java 中使用时工作得很好。但是mongodb mapreduce中有没有一种方法可以使用java驱动程序将结果存储到不同的数据库中。我想要实现这一点,因为 mapreduce 无法创建上限集合。所以我想将 mapreduce 的结果写入不同的集合,并在目标数据库中创建一个上限集合并插入到该集合中。

`MapReduceCommand wktgtcmd = new MapReduceCommand(tgtCollection, wk_map_function, tgt_reduce_function, 
                    "collection String", MapReduceCommand.OutputType.MERGE, null);
tgtCollection.mapReduce(wktgtcmd);`

诸如“数据库.Collection String”之类的东西或实现此目的的一些提示?

4

2 回答 2

2

通常可以调用MapReduceCommand.setOutputDB方法来告诉 map reduce 命令使用哪个数据库。

但是,在从 mongo shell 进行快速测试之后,如果 mongodb 服务器设置了上限,它看起来会首先丢弃该集合。

如果您希望结果进入上限集合,那么最简单的方法是将结果内联并手动将它们插入到上限集合中:

MapReduceCommand wktgtcmd = new MapReduceCommand(tgtCollection, 
                                                 wk_map_function, 
                                                 tgt_reduce_function, 
                                                 null,
                                                 MapReduceCommand.OutputType.INLINE, 
                                                 null);
 MapReduceOutput out = tgtCollection.mapReduce(cmd);


 DB db = mongo.getDB("database");
 DBCollection results = db.getCollection("collection");
 for (DBObject o : out.results()) {
    results.insert(o);
 }
于 2013-07-23T12:53:37.450 回答
0

自己存储结果。如果超过 16MB BSON 限制。使用 GridFS!

https://docs.mongodb.com/manual/core/gridfs/

GridFS 是一种用于存储和检索超过 BSON 文档大小限制 16 MB 的文件的规范。

GridFS 不是将文件存储在单个文档中,而是将文件分成部分或块 [1],并将每个块存储为单独的文档。默认情况下,GridFS 使用 255 kB 的块大小;也就是说,GridFS 将一个文件分成 255 kB 的块,最后一个块除外。最后一块只有必要的大。类似地,不大于块大小的文件只有一个最终块,只使用所需的空间以及一些额外的元数据。

于 2017-03-16T16:12:20.547 回答