我正在查看以下线程:mongoexport aggregate export to a csv file
并且我可以将建议的.toCsv()
与db.collection.find()
一起使用
但我无法与db.collection.aggregate().toCsv()
它给我一个错误:
TypeError:... toCsv()不是函数。详细信息:$(shell):1:1
我在做什么错了?
答案 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
或者,您可以编写一个类似的函数,该函数接受数组并以所需的方式对其进行格式化:修改原型的唯一好处是可以很好地链接事物。