下面的代码片段在java中使用时效果良好。但是在mongodb mapreduce中有没有一种方法可以使用java驱动程序将结果存储到不同的数据库中。我想实现这一点,因为mapreduce无法创建有上限的集合。因此,我想将mapreduce的结果写入另一个集合,并在目标数据库中创建一个capped集合并插入到该集合中。
`MapReduceCommand wktgtcmd = new MapReduceCommand(tgtCollection, wk_map_function, tgt_reduce_function,
"collection String", MapReduceCommand.OutputType.MERGE, null);
tgtCollection.mapReduce(wktgtcmd);`
类似于"数据库.Collection字符串"或一些实现此目的的提示?
通常您可以调用MapReduceCommand.setOutputDB方法来告诉map reduce命令要使用哪个数据库。
然而,在从mongoshell进行快速测试后,如果集合被封顶,看起来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);
}
自己存储结果。如果超过16MB BSON限制。使用GridFS!
https://docs.mongodb.com/manual/core/gridfs/
GridFS是用于存储和检索超过BSON文档大小限制16 MB的文件的规范。
GridFS不是将文件存储在单个文档中,而是将文件划分为多个部分或块[1],并将每个块存储为一个单独的文档。默认情况下,GridFS使用255 kB的块大小;也就是说,GridFS将文件划分为255 kB的块,最后一个块除外。最后一个区块只有在必要时才大。类似地,不大于块大小的文件只有一个最终块,只使用所需的空间和一些额外的元数据。