提问者:小点点

将mongo查询的输出重定向到csv文件


感谢任何帮助:)


共3个答案

匿名用户

我知道这个问题很老,但是我花了一个小时试图将一个复杂的查询导出到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