Aaf*_*ikh 74 mongodb mongodb-query mongodb-.net-driver
我使用MongoDB 2.2.2 for 32位Windows7机器.我在.js文件中有一个复杂的聚合查询.我需要在shell上执行此文件并将输出定向到CSV文件.我确保查询返回一个"扁平"json(没有嵌套键),因此它本身可以转换为一个整洁的csv.
我知道load()和eval().eval()要求我将整个查询粘贴到shell中,只允许printjson()在脚本内部,而我需要csv.并且,第二种方式:load()..它在屏幕上打印输出,并再次以json格式打印.
Mongo有没有办法从json转换到csv?(我需要csv文件来准备数据上的图表).我在想:
1.要么mongo有一个内置命令,我现在找不到.
蒙哥不能帮我做; 我最多可以将json输出发送到一个文件,然后我需要将其转换为csv.
3. Mongo可以将json输出发送到临时集合,其内容可以很容易地转换mongoexported为csv格式.但我认为只有map-reduce查询支持输出集合.是对的吗?我需要它来进行聚合查询.
谢谢你的帮助 :)
GEv*_*ing 151
我知道这个问题已经过时但我花了一个小时试图将复杂的查询导出到csv,我想分享我的想法.首先,我无法让任何json到csv转换器工作(虽然这看起来很有希望).我最终做的是手动在我的mongo脚本中编写csv文件.
这是一个简单的版本,但基本上我做了:
print("name,id,email");
db.User.find().forEach(function(user){
print(user.name+","+user._id.valueOf()+","+user.email);
});
Run Code Online (Sandbox Code Playgroud)
这我只是将查询传递给stdout
mongo test export.js > out.csv
Run Code Online (Sandbox Code Playgroud)
test我使用的数据库的名称在哪里.
thi*_*ttr 96
Mongo的内置导出工作正常,除非你想要任何数据操作,如格式日期,隐蔽数据类型等.
以下命令作为魅力.
mongoexport -h localhost -d databse -c collection --type=csv
--fields erpNum,orderId,time,status
-q '{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}'
--out report.csv
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下方法:
print("id,name,startDate")
cursor = db.<collection_name>.find();
while (cursor.hasNext()) {
jsonObject = cursor.next();
print(jsonObject._id.valueOf() + "," + jsonObject.name + ",\"" + jsonObject.stateDate.toUTCString() +"\"")
}
Run Code Online (Sandbox Code Playgroud)
将其保存在文件中,例如"export.js".运行以下命令:
mongo <host>/<dbname> -u <username> -p <password> export.js > out.csv
Run Code Online (Sandbox Code Playgroud)
扩展其他答案:
我发现@ GEverding的答案最灵活.它也适用于聚合:
test_db.js
print("name,email");
db.users.aggregate([
{ $match: {} }
]).forEach(function(user) {
print(user.name+","+user.email);
}
});
Run Code Online (Sandbox Code Playgroud)
执行以下命令导出结果:
mongo test_db < ./test_db.js >> ./test_db.csv
Run Code Online (Sandbox Code Playgroud)
不幸的是,它在CSV文件中添加了额外的文本,需要先处理文件才能使用它:
MongoDB shell version: 3.2.10
connecting to: test_db
Run Code Online (Sandbox Code Playgroud)
但是我们可以让mongo shell停止吐出那些评论,只打印我们通过传递--quiet旗帜所要求的内容
mongo --quiet test_db < ./test_db.js >> ./test_db.csv
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98270 次 |
| 最近记录: |