mongodb_导入导出数据

本文介绍MongoDB中的数据导入导出方法,重点讲解mongoexport、mongoimport、mongodump及mongorestore的操作细节,并讨论了几种数据库复制策略及其适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mongodb 导入导出数据

在mongodb中多中导入导出数据的方式,需要针对不同的应用进行选择。本文主要讲mongoexport,import及dump,restore这两种方式

1.mongoexport,mongoimport

这是一种导成json格式的方式。Json可以导入多种数据库,也可以在mongodb的不同版本之间进行操作
mongoexport 可以导成json及csv格式,但是csv格式必须使用-f 来表明需要导出的字段,如果是一个比较大的集合,那么需要指明每一个字段,针对这点,json还是比较方便,不过csv格式可以直接导入SQLServe.在mongodb中导出含有中文的字符可能会出现乱码,如果文档不是很大,可以使用txt然后指定编码格式另存为新的一份csv会破解这种乱码的情况。
Mongoexport -d test -c name -o name.dat -h 127.0.0.1:5000 –u xxx –p xxx –authenticationDatabase=admin
其中dat的格式是数据库将自己格式的数据文件转换成文本格式,dat是其中一种纯文本的,没有任何数据属性结构方面的信息,可以使用记事本打开。

2. mongodump,mongorstore

导出包括.metadata,.bson两个文件,包含索引等信息,应该说相对是比较完整的信息。但是很可能在不同版本之间导入导出会出现问题。Mongodump备份的例子为:
mongodump -h 127.0.0.1:5000 -u xxx -p xxx –authenticationDatabase=admin -d test -c name -o /home/dump
其中:h:ip与端口,u:用户名,-p 密码,–authenticationDatabase授权数据库,d 需要备份的数据库名称,-c 备份的集合,-o 备份的目录。所以这就相当于可以将远程的数据库备份到本地。只要指定了对应的ip及端口号。
Mongorestore –h 127.0.0.1:5000 -u xxx -p xxx –authenticationDatabase=admin -d test -c name /home/dump/test/name.json
在还原数据库的时候,不需要写出-o选项。最后一个参数默认为数据的路径,我们需要写明哪个json. 如果没有-c指定集合,默认的是整个数据库。对应的在mongorstore中不需要指定某个特定的集合,但必须指定数据库备份的目录。

问题集锦
1.在Mongoexport及mongodump中均可以使用-q来指定需要备份还原的符合条件的结果集。需要注意的是如果使用了ISODate类型的字段作为查找,-q后面的查询不能直接写成ISODate(“2017-02-12T08:00:00Z”),需要转换成时间戳格式。并使用Date时间进行查询。在shell中使用ISODate(“2017-02-12T08:00:00Z”).valueOf()得到数值。所以,查询条件应为:new Date(1486886400000)
2.今天在备份数据的时候很长一段时间都是%0的进度,当然这个集合有一点大,数据量上亿。好容易到了121条数据,突然报错:error reading collection: invalid cursor。
原因:mongodb的备份数据可能会出现问题,来自于游标。网址为:https://jira.mongodb.org/browse/TOOLS-902,于是按照所述的方案:db.runCommand({setParameter: 1, cursorTimeoutMillis: 60000}),再次执行dump果然是生效了。
3.Mongorestore在导入数据是遇到:invalid BSONSize使用—batchSize=1000来解决
连接为: https://jira.mongodb.org/browse/TOOLS-939
4.在mongodb写入数据库时会使用压缩算法,但是使用dump之后将会还原到原始大小,所以在备份前应该查看的是size大小而不是storageSize大小来权衡硬盘的容量

还有几种其它的数据库复制策略
3. db.cloneCollection
存在的问题有:1.不支持授权的原数据库;2.如果集合已经存在则会报错;3.只能从mongod中进行复制,不支持mongos.所以如果是分片的情况下,是不适合使用该方式。
4. db.cloneDatabase
在3.2版本中,克隆整个数据库,会将目标数据库锁住,如果当前数据库正在使用,无疑非常的危险。
5. db. collection.CopyTo
是一个全局锁,阻止所有的读写操作。需要anyAction,anyResource权限,使用的是js命令。
6. db.copyDatabase
目标数据库不能存在相同的集合,mongod之间的操作,在分片的情况下,不可使用copyDatabase

总结:所以如果是希望从一个数据库中还原数据至另一个数据库,且数据库还原过程必须不能影响现有的操作,使用dump与restore相对来说是比较好的方式。

### MongoDB 数据导入导出方法与工具 #### 使用 `mongodump` 和 `mongorestore` `mongodump` 是一种用于从 MongoDB 数据库中读取数据并生成 BSON 文件的备份工具。它可以用来创建整个数据库或者特定集合的数据副本,非常适合于小型至中型规模的数据备份场景[^4]。 以下是使用 `mongodump` 的基本命令结构: ```bash mongodump --host <dbhost> --db <dbname> --username <user> --password <password> --out <output_directory> ``` 执行此命令后,会将指定数据库中的所有数据保存到目标目录下的子文件夹中。如果需要针对某个具体集合操作,则可以附加参数 `--collection=<collection_name>` 来限定范围。 相对应地,当需要把通过 `mongodump` 创建的备份重新加载回 MongoDB 实例时,可利用其配套工具 `mongorestore` 完成这一过程。下面是一个典型的调用方式实例: ```bash mongorestore --host <dbhost> --db <dbname> --collection <collection_name> --dir <path_to_backup_files> --username <user> --password <password> ``` 这里需要注意的是,在实际应用过程中可能还需要考虑网络延迟、存储空间等因素的影响;对于超大规模的数据集而言,单纯依赖这些基础命令或许无法满足性能需求,此时应当探索更高级别的配置选项或是采用分片集群架构来优化流程效率[^5]。 #### 利用 `mongoimport` 及 `mongoexport` 除了上述基于二进制格式(BSON)的操作手段之外,MongoDB 还另外准备了一套面向文本形式(如 JSON、CSV 或 TSV)处理的服务——即 `mongoimport` 和 `mongoexport` 组合。它们允许开发者更加灵活便捷地完成跨平台间不同类型文档之间的转换工作[^2]。 例如要将以 CSV 表格样式呈现出来的记录迁移到 NoSQL 存储引擎内部去的话,那么只需简单编写如下脚本即可实现自动化迁移任务: ```bash mongoimport --type csv --file data.csv --headerline --db testDb --collection contacts ``` 而反过来要是想提取某张表里面部分字段出来形成新的平面文件供其他程序分析解读之用呢?那就可以借助另一个兄弟产品来做这件事啦! ```bash mongoexport --db testDb --collection contacts --fields name,email --type=csv --out contact-info.csv ``` 以上两种途径各有千秋,前者侧重于保持原始对象层次关系不变的同时快速填充大量初始内容进去;后者则强调易读性和互操作性方面优势明显一些[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值