MongoDB中的mongoexport工具可以把一个collection导出成JSON格式或者CSV格式的文件,速度非常快。
通过下面的代码,将miui_flow_statis库中的src_pv_uv集合导出到文本文件,在导出的文件中,每行一个JSON,代表一个Document。
# mongoexport --host 10.136.33.51 --port 30000 -d miui_flow_statis -c src_pv_uv -o /tmp/src_pv_uv
2017-07-19T11:47:27.940+0800 connected to: 10.136.33.51:30000
2017-07-19T11:47:28.323+0800 exported 12740 records
MongoDB中的mongoimport工具可以把一个特定文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。
通过下面的代码,将/tmp/src_pv_uv文件导入到miui_flow_statis库中的src_pv_uv集合。在/tmp/src_pv_uv文件中,每行一个JSON。
# mongoimport --host 10.136.33.51 --port 30000 -d miui_flow_statis -c src_pv_uv /tmp/src_pv_uv
2017-07-19T11:56:44.147+0800 connected to: 10.136.33.51:30000
2017-07-19T11:56:44.955+0800 imported 12740 documents
mongoexport是Linux下的命令行工具,查看该命令的帮助文档可以看到有很多选项,我们重点分析一些常用的选项。
指定MongoDB服务器IP地址。
-h, --host=<homename>
(setname/host1,host2 for replica sets)
指定MongoDB服务器端口号(注意:-p是密码)。
--port=<port>
通常,在导出时指定服务器主机和端口号有以下几种用法
# mongoexport -h host1:port
# mongoexport --host host1 --port 30000
# mongoexport --host replicaSetName/host1,host2 --port 3000
当MongoDB设置了账号认证时,需要在导出的时候提供用户名和密码。
-u, --username=<username> username for authentication
-p, --password=<password> password for authentication
在使用mongoexport导出时,需要指定MongoDB的数据库名称和集合名称,可以通过下面两个选项设置。
-d, --db=<database-name> database to use
-c, --collection=<collection-name> collection to use
在使用mongoexport导出时,可以选择输出文件的类型(json、csv或控制台)。当选择输出为json类型文件时,可以设置输出每行一个json对象或一个json对象的数组,还可以对输出json进行格式化(pretty)。当选择输出为csv时,可以选择要输出的表头域,也可以省略表头域。默认输出的是json,每行一个json对象。当没有指定-o
选项时,会将导出内容打印在控制台上。
-f, --fields=<field>[,<field>]* csv header fields, eg: -f "name,age"
--fieldFile=<filename> file with field names - 1 per line
--type=<type> 'json' or 'csv', default 'json'
-o, --out=<filename> output file; if not specified, stdout is used
--jsonArray output to a JSON array rather than one object per line
--pretty output JSON formatted to be human-readable
--noHeaderLine export CSV data without a list of field names at the first line
通常,在导出时可以有以下组合来指定导出文件的格式和内容。
导出为文件,格式为json,每行一个json对象。
-o /tmp/data.txt
导出为文件,格式为json,构成一个json数组。
-o /tmp/data.txt --jsonArray
导出为文件,格式为json,构成一个json数组,并进行格式化。
-o /tmp/data.txt --jsonArray --pretty
导出为文件,格式为csv,指定表头域。
-f "name,age"
在使用mongoexport导出数据时,可以指定查询语句或者指定一个包含查询语句的文件,为导出添加条件。
-q, --query=<json> query filter, as a JSON string, e.g., '{x:{$gt:1}}'
--queryFile=<filename> path to a file containing a query filter (JSON)
-k, --slaveOk allow secondary reads if available (default true) (default: false)
--readPreference=<string>|<json> specify either a preference name or a preference json object
--forceTableScan force a table scan (do not use $snapshot)
--skip=<count> number of documents to skip
--limit=<count> limit the number of documents to export
--sort=<json> sort order, as a JSON string, e.g. '{x:1}'
--assertExists if specified, export fails if the collection does not exist (default: false)
mongoimport是Linux下的命令行工具,查看该命令的帮助文档可以看到有很多选项,我们重点分析一些常用的选项。
指定MongoDB服务器IP地址。
-h, --host=<homename>
(setname/host1,host2 for replica sets)
指定MongoDB服务器端口号(注意:-p是密码)。
--port=<port>
通常,在导入时指定服务器主机和端口号有以下几种用法
# mongoimport -h host1:port
# mongoimport --host host1 --port 30000
# mongoimport --host replicaSetName/host1,host2 --port 3000
当MongoDB设置了账号认证时,需要在导出的时候提供用户名和密码。
-u, --username=<username> username for authentication
-p, --password=<password> password for authentication
在使用mongoimport导入时,需要指定MongoDB的数据库名称和集合名称,可以通过下面两个选项设置。
-d, --db=<database-name> database to use
-c, --collection=<collection-name> collection to use
使用mongoimport导入时需要指定输入文件,如果导入文件是csv格式,或者是jsonArray格式,则需要通过选项指定输入格式。
-f, --fields=<field>[,<field>]* comma separated list of fields, e.g. -f name,age
--fieldFile=<filename> file with field names - 1 per line
--file=<filename> file to import from; if not specified, stdin is used
--headerline use first line in input source as the field list (CSV and TSV only)
--jsonArray treat input source as a JSON array
--parseGrace=<grace> controls behavior when type coercion fails - one of: autoCast, skipField, skipRow, stop (defaults to 'stop') (default: stop)
--type=<type> input format to import: json, csv, or tsv (defaults to 'json') (default: json)
--columnsHaveTypes indicated that the field list (from --fields, --fieldsFile, or --headerline) specifies types; They must be in the form of '<colName>.<type>(<arg>)'. The type
can be one of: auto, binary, bool, date, date_go, date_ms, date_oracle, double, int32, int64, string. For each of the date types, the argument is a datetime
layout string. For the binary type, the argument can be one of: base32, base64, hex. All other types take an empty argument. Only valid for CSV and TSV
imports. e.g. zipcode.string(), thumbnail.binary(base64)
使用mongoimport导入时可以设置一些输入选项,比如在插入前是否要删除已经存在的集合,当发生错误时是否要继续等。
--drop drop collection before inserting documents
--ignoreBlanks ignore fields with empty values in CSV and TSV
--maintainInsertionOrder insert documents in the order of their appearance in the input source
-j, --numInsertionWorkers=<number> number of insert operations to run concurrently (defaults to 1) (default: 1)
--stopOnError stop importing at first insert/upsert error
--mode=[insert|upsert|merge] insert: insert only. upsert: insert or replace existing documents. merge: insert or modify existing documents. defaults to insert
--upsertFields=<field>[,<field>]* comma-separated fields for the query part when --mode is set to upsert or merge
--writeConcern=<write-concern-specifier> write concern options e.g. --writeConcern majority, --writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}' (defaults to 'majority') (default: majority)
--bypassDocumentValidation bypass document validation