我知道这个问题很老,但是我花了一个小时试图将一个复杂的查询导出到csv,我想分享我的想法。首先,我无法让任何json到csv转换器工作(尽管这个看起来很有希望)。我最终做的是在我的mongo脚本中手动编写csv文件。
这是一个简单的版本,但本质上我所做的:
print("name,id,email");
db.User.find().forEach(function(user){
print(user.name+","+user._id.valueOf()+","+user.email);
});
这个我刚刚通过管道将查询发送到标准输出
mongo test export.js > out.csv
其中test
是我使用的数据库的名称。
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
扩展其他答案:
我发现@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
但是我们可以让mongoshell停止吐出这些注释,只打印我们要求的内容,方法是通过传递--安静
标志
mongo --quiet test_db < ./test_db.js >> ./test_db.csv