你是对的,mongo 中的 map-reduce 假设一个键具有一个值文档——这就是为什么你最终得到的文档只有两个对象,一个键和一个(复杂的、嵌套的)值对象。
您可以编写一些代码将 .csv 文件转换为 .json。
或者,这里有一点技巧。我使用mongoexport将数据(在使用 map-reduce 过程之后)导出到 json ,使用sed解压值对象,然后使用mongoimport将其导入回来。如果使用管道,则无需随时保存整个文件(sed 是流式编辑器)。对于您引用的另一篇文章中的示例,您可以使用:
mongoexport -c users_comments | sed 's/\"value\" : {//' | sed s/\}$// | mongoimport -c user_comments2
这个单行将复制 user_comments 集合并将其存储在一个新集合 user_comments2 中。如果您有更多磁盘空间,您可以保存导出文件并在导出后删除 user_comments 集合,然后导入文件。它需要几行:
mongoexport -c users_comments | sed 's/\"value\" : {//' | sed s/\}$// > export.json
# now use mongo to drop the user_comments collection, and then:
mongoimport -c user_comments < export.json
假设 _id 不包含字符串“value”,并且您已经使用 mongoimport 导入了该数据,因此遭受了它所带来的任何数据丢失。我已经在小型数据集上对此进行了测试。我不会在实时生产数据库上推荐这种方法。