将mongo查询的输出redirect到一个csv文件

我正在使用MongoDB 2.2.2的32位Windows7机器。 我在.js文件中有一个复杂的聚合查询。 我需要在shell上执行这个文件并将输出指向一个CSV文件。 我确保查询返回一个“扁平”的JSON(没有嵌套键),所以它本质上可以转换成一个整洁的CSV。

我知道load()eval()eval()要求我将整个查询粘贴到shell中,并且只允许脚本中的printjson() ,而我需要csv。 第二种方法: load() ..它将输出显示在屏幕上,再以json格式显示。

有没有一种方法可以做Mongo从json到csv的转换? (我需要csv文件来准备数据图表)。 我在想:

mongo有一个内置的命令,我现在找不到。
2.蒙戈不能为我做; 我最多可以发送json输出到一个文件,然后我需要转换为csv我自己。
3. Mongo可以发送json输出到一个临时的集合,其中的内容可以很容易地mongoexported为csv格式。 但我认为只有map-reduce查询支持输出集合。 是对的吗? 我需要它的聚合查询。

谢谢你的帮助 :)

我知道这个问题是旧的,但我花了一个小时试图导出一个复杂的查询CSV文件,我想分享我的想法。 首先,我无法获得任何json到csv转换器的工作(虽然这看起来很有希望)。 我最终做的是在我的mongo脚本中手动编写csv文件。

这是一个简单的版本,但基本上是我所做的:

 print("name,id,email"); db.User.find().forEach(function(user){ print(user.name+","+user._id.valueOf()+","+user.email); }); 

这只是pipe道查询到标准输出

 mongo test export.js > out.csv 

其中test是我使用的数据库的名称。

Mongo的内置导出工作正常,除非你想要格式化date,隐藏数据types等任何数据操作。

以下命令作为魅力。

 mongoexport -h localhost -d databse -c collection --csv --fields erpNum,orderId,time,status -q '{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}' --out report.csv 

看看这个

用于从mongo shell输出到文件。 不支持从mongos shell输出csv。 你将不得不自己写javascript或使用许多转换器之一。 例如,Google“将json转换为csv”。

这里是你可以尝试的:

 print("id,name,startDate") cursor = db.<collection_name>.find(); while (cursor.hasNext()) { jsonObject = cursor.next(); print(jsonObject._id.valueOf() + "," + jsonObject.name + ",\"" + jsonObject.stateDate.toUTCString() +"\"") } 

保存在一个文件中,说“export.js”。 运行以下命令:

 mongo <host>/<dbname> -u <username> -p <password> export.js > out.csv 

扩展其他答案:

我发现@ GEverding的答案最为灵活。 它也适用于聚合:

test_db.js

 print("name,email"); db.users.aggregate([ { $match: {} } ]).forEach(function(user) { print(user.name+","+user.email); } }); 

执行以下命令来导出结果:

 mongo test_db < ./test_db.js >> ./test_db.csv 

不幸的是,它添加了额外的文本到CSV文件,这需要处理文件,然后才能使用它:

 MongoDB shell version: 3.2.10 connecting to: test_db 

但是我们可以让mongo shell停止吐出这些评论,只打印我们通过传递--quiet标志所要求的内容

 mongo --quiet test_db < ./test_db.js >> ./test_db.csv