MongoDB汇总导出到CSV

时间:2019-07-01 11:20:08

标签: mongodb export-to-csv

我正在查看以下线程:mongoexport aggregate export to a csv file

并且我可以将建议的.toCsv()db.collection.find()一起使用 但我无法与db.collection.aggregate().toCsv()

一起使用

它给我一个错误:

  

TypeError:... toCsv()不是函数。详细信息:$(shell):1:1

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

嘿,mongo命令告诉你toCVS

我更喜欢的解决方案是

var result = db.compras.aggregate()

然后将结果放入集合

db.agr.insert(result.result);

使用mongoexport

mongoexport -d yourdbname -c agr -f _id,total --csv > results.csv

答案 1 :(得分:0)

您使用的脚本是猴子补丁DBCommandCursor.prototype.toCsv,将toCsv方法添加到游标,由于某种原因,这似乎不适用于聚合游标(并且完全不能在我正在运行的mongo版本上运行。

一种危险方法不是弄清楚mongo shell为什么不按照您的方式运行,而是猴子修补Array.prototype

Array.prototype.toCSV = function toMediocreCSV () {
  const results = this;
  const headers = {};
  results.forEach((result) =>
    Object.keys(result).forEach((key) => headers[key] = true)
  )
  const keys = Object.keys(headers);
  print(keys.join(","));
  results.forEach((result) =>
    print(keys.map((key) => result[key] != null ? result[key] : '')
      .join(",")) 
  )
}
> db.test.aggregate().toArray().toCSV()
_id,a,b,c
ObjectId("5d1a77e1688b8f1d66098375"),1,2,
ObjectId("5d1a77e1688b8f1d66098376"),3,,4

或者,您可以编写一个类似的函数,该函数接受数组并以所需的方式对其进行格式化:修改原型的唯一好处是可以很好地链接事物。