每隔一段时间,我需要给驻留在MongoDB中的非技术用户(例如业务分析师)提供数据; 因此,我将目标数据导出为CSV文件 (将它们导入Excel或类似工具后,他们大概可以对其进行切片和切块)。 Mongo有一个方便的导出实用程序 ,其中包含很多选项,但是,对于如何正确以CSV格式导出数据,存在一个突出的错误和一些普遍的困惑 。
因此,如果您需要将MongoDB中的某些特定数据导出为CSV格式,请按以下步骤操作。 关键参数是连接信息,包括身份验证,输出文件,最重要的是要导出的字段列表。 此外,您可以提供转义JSON格式的查询。
您可以在Mongo安装bin
目录中找到mongoexport
实用程序。 我倾向于使用冗长的参数名称和显式的连接信息(即,不是URL语法,我更喜欢直接拼出主机,端口,数据库等)。 当我针对特定数据时,我将指定集合; 而且,我将通过查询进一步过滤数据。
可以通过$oid
格式引用ObjectId
。 此外,您需要转义所有JSON引号。 例如,如果我的查询针对一个users
集合并由account_id
(这是一个ObjectId
)进行过滤,则通过mongo
shell进行的查询将是:
Mongo Shell查询
db.users.find({account_id:ObjectId('5058ca07b7628c0002099006')})
通过命令行àla monogexport
,它转换为:
集合和查询
--collection users --query "{\"account_id\": {\"\$oid\": \"5058ca07b7628c0002000006\"}}"
最后,如果只想导出user
文档中的一部分字段,例如name
, email
和created_at
,则需要通过fields
参数提供它们,如下所示:
字段声明
--fields name,email,created_at
将所有内容放在一起将产生以下命令:
放在一起
mongoexport --host mgo.acme.com --port 10332 --username acmeman --password 12345 \
--collection users --csv --fields name,email,created_at --out all_users.csv --db my_db \
--query "{\"account_id\": {\"\$oid\": \"5058ca07b7628c0999000006\"}}"
当然,您可以将其放入bash脚本并使用bash方便的$1
, $2
等变量对collection
, fields
,输出文件和查询进行参数化。
翻译自: https://www.javacodegeeks.com/2013/06/mongodb-to-csv.html