我使用的MongoDB 2.2.2为32位的Windows7机器。 我有一个.js文件复杂聚集查询。 我需要执行的shell这个文件,并直接输出到CSV文件。 我保证该查询返回一个“平” JSON(没有嵌套键),因此它本质上是转换为一个整洁的CSV。
我知道load()
和eval()
。 eval()
需要我整个查询粘贴到外壳,仅允许printjson()
里面的脚本,而我需要CSV。 并且,第二方式: load()
..它打印在屏幕上的输出,并再次JSON格式。
有没有办法蒙戈可以做到从JSON这种转换到csv? (我需要csv文件对数据准备图表)。 我在想:
1.无论是蒙戈有这一点,我现在不能找到一个内置的命令。
2.蒙戈不能为我做到这一点; 我可以在JSON输出最多发送到一个文件,然后我需要转换到csv自己。
3.蒙戈可以在JSON输出发送到一个临时集合,其内容可以容易地mongoexported
为CSV格式。 但我认为只映射简化查询支持输出集合。 是对的吗? 我需要它的聚合查询。
谢谢你的帮助 :)
我知道这个问题是旧的,但我花一个小时尝试导出复杂的查询到csv,我想分享我的想法。 首先,我不能得到任何的JSON的到csv转换器工作(虽然这一个看起来前途无量)。 我落得这样做手工写在我的蒙戈脚本csv文件是什么。
这是一个简单的版本,但基本上我做了什么:
print("name,id,email");
db.User.find().forEach(function(user){
print(user.name+","+user._id.valueOf()+","+user.email);
});
这只是我的管道查询到stdout
mongo test export.js > out.csv
其中, test
是我使用的数据库的名称。
蒙戈的内置出口工作正常,除非你要像格式化日期,隐秘数据类型等任何数据操作
以下命令可以作为魅力。
mongoexport -h localhost -d databse -c collection --csv
--fields erpNum,orderId,time,status
-q '{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}'
--out report.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
看看这个
从蒙戈outputing外壳文件。 有从mongos外壳outputing CSV不支持。 你将不得不自己编写JavaScript或使用现有的许多转换器之一。 谷歌“转换JSON为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
但是,我们可以让蒙戈外壳停止随地吐痰这些评论并只打印通过将我们已要求--quiet
标志
mongo --quiet test_db < ./test_db.js >> ./test_db.csv