在Ubuntu 14.04上如何导入和导出MongoDB数据库

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 在Ubuntu 14.04上如何导入和导出MongoDB数据库

MongoDB 是最流行的 NoSQL 数据库引擎之一。它以可扩展、强大、可靠和易于使用而闻名。在本文中,我们将向您展示如何导入和导出您的 MongoDB 数据库。

我们应该明确指出,在本文中,通过导入和导出,我们指的是处理以人类可读格式存储的数据,这种格式与其他软件产品兼容。相比之下,备份和恢复操作创建或使用特定于 MongoDB 的二进制数据,这不仅可以保持数据的一致性和完整性,还可以保留其特定的 MongoDB 属性。因此,对于迁移,通常最好使用备份和恢复,只要源和目标系统是兼容的。备份、恢复和迁移超出了本文的范围 - 请参阅《如何在 Ubuntu 14.04 上备份、恢复和迁移 MongoDB 数据库》。

先决条件

在按照本教程之前,请确保您完成以下先决条件:

  • Ubuntu 14.04 Droplet
  • 非 root sudo 用户。详细信息请参阅《使用 Ubuntu 14.04 进行初始服务器设置》。
  • 已安装并配置 MongoDB,使用文章《如何在 Ubuntu 14.04 上安装 MongoDB》。

除非另有说明,在本教程中需要 root 权限的所有命令都应该以具有 sudo 权限的非 root 用户身份运行。

理解基础知识

在继续阅读本文之前,需要对相关内容有一些基本的了解。如果您有使用流行的关系型数据库系统(如 MySQL)的经验,那么在使用 MongoDB 时可能会发现一些相似之处。

您应该知道的第一件事是,MongoDB 使用 json 和 bson(二进制 json)格式来存储信息。Json 是一种人类可读的格式,非常适合导出和最终导入您的数据。您可以使用任何支持 json 的工具来进一步管理导出的数据,包括简单的文本编辑器。

一个示例的 json 文档如下:

{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

Json 很方便使用,但它不支持 bson 中的所有数据类型。这意味着如果您使用 json,信息将会出现所谓的“信息丢失”。这就是为什么在备份/恢复时最好使用能够更好地恢复您的 MongoDB 数据库的二进制 bson。

其次,您不必担心显式创建 MongoDB 数据库。如果您指定要导入的数据库不存在,它将会自动创建。与其他数据库引擎相比,MongoDB 中的集合(数据库表)结构也是自动在第一次插入文档(数据库行)时创建的。

第三,在 MongoDB 中,读取或插入大量数据(例如本文任务中的任务)可能会消耗大量 CPU、内存和磁盘空间,这可能会对资源造成压力。考虑到 MongoDB 经常用于大型数据库和大数据,这是一个很关键的问题。这个问题的最简单解决方案是在夜间运行导出/备份。

第四,如果您的 MongoDB 服务器繁忙,在数据库导出过程中信息发生变化,信息一致性可能会成为一个问题。这个问题没有简单的解决方案,但在本文结束时,您将看到有关复制的进一步阅读建议。

将信息导入 MongoDB

为了了解将信息导入 MongoDB 的工作原理,让我们使用一个关于餐馆的流行示例 MongoDB 数据库。它以 .json 格式提供,并且可以使用 wget 进行下载,如下所示:

wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

下载完成后,您应该在当前目录中有一个名为 primer-dataset.json(大小为 12 MB)的文件。让我们将此文件中的数据导入到一个名为 newdb 的新数据库中,并导入到一个名为 restaurants 的集合中。我们将使用 mongoimport 命令进行导入,如下所示:

sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

结果应该如下所示:

2016-01-17T14:27:04.806-0500    connected to: localhost
2016-01-17T14:27:07.315-0500    imported 25359 documents

如上所示,已导入 25359 个文档。因为我们没有名为 newdb 的数据库,MongoDB 自动创建了它。

让我们通过连接到新创建的名为 newdb 的 MongoDB 数据库来验证导入,如下所示:

sudo mongo newdb

您现在已连接到新创建的 newdb 数据库实例。请注意,您的提示符已更改,表示您已连接到数据库。

使用以下命令计算餐馆集合中的文档数:

db.restaurants.count()

结果应该显示为 25359,正好是导入文档的数量。为了进行更好的检查,您可以选择餐馆集合中的第一个文档,如下所示:

db.restaurants.findOne()

结果应该如下所示:

{
        "_id" : ObjectId("569beb098106480d3ed99926"),
        "address" : {
                "building" : "1007",
                "coord" : [
                        -73.856077,
                        40.848447
                ],
                "street" : "Morris Park Ave",
                "zipcode" : "10462"
        },
        "borough" : "Bronx",
        "cuisine" : "Bakery",
        "grades" : [
                {
                        "date" : ISODate("2014-03-03T00:00:00Z"),
                        "grade" : "A",
                        "score" : 2
                },
...
        ],
        "name" : "Morris Park Bake Shop",
        "restaurant_id" : "30075445"
}

这样详细的检查可以揭示文档中的问题,例如它们的内容、编码等。json 格式使用 UTF-8 编码,您的导出和导入应该使用该编码。如果您手动编辑 json 文件,请记住这一点。否则,MongoDB 将自动为您处理。

要退出 MongoDB 提示符,请在提示符处键入 exit

exit

您将返回到普通的命令行提示符,作为您的非 root 用户。

从 MongoDB 导出信息

正如我们之前提到的,通过导出 MongoDB 信息,您可以获得一个包含数据的可读文本文件。默认情况下,信息以 json 格式导出,但您也可以导出为 csv(逗号分隔值)。

要从 MongoDB 导出信息,请使用 mongoexport 命令。它允许您进行非常精细的导出,以便您可以指定数据库、集合、字段,甚至可以使用查询进行导出。

一个简单的 mongoexport 示例是从我们之前导入的 newdb 数据库中导出 restaurants 集合。可以这样做:

sudo mongoexport --db newdb -c restaurants --out newdbexport.json

在上面的命令中,我们使用 --db 指定数据库,-c 指定集合,--out 指定数据将保存在哪个文件中。

成功的 mongoexport 输出应该如下所示:

2016-01-20T03:39:00.143-0500    connected to: localhost
2016-01-20T03:39:03.145-0500    exported 25359 records

上面的输出显示已导出 25359 条记录 — 与导入的数量相同。

在某些情况下,您可能需要仅导出集合的一部分。考虑到 restaurants json 文件的结构和内容,让我们导出满足以下条件的所有餐馆:位于布朗克斯区并提供中餐。如果我们想要直接在连接到 MongoDB 时获取此信息,请重新连接到数据库:

sudo mongo newdb

然后,使用此查询:

db.restaurants.find( { borough: "Bronx", cuisine: "Chinese" } )

结果将显示在终端上。要退出 MongoDB 提示符,请在提示符处键入 exit

exit

如果您想要从 sudo 命令行而不是在连接到数据库时导出数据,请将上一个查询作为 mongoexport 命令的一部分,通过为 -q 参数指定它,如下所示:

sudo mongoexport --db newdb -c restaurants -q "{ borough: 'Bronx', cuisine: 'Chinese' }" --out Bronx_Chinese_retaurants.json

请注意,我们在查询条件中使用单引号内嵌在双引号中。如果您使用双引号或特殊字符如 $,您将需要在查询中用反斜杠(\)进行转义。

如果导出成功,结果应该如下所示:

2016-01-20T04:16:28.381-0500    connected to: localhost
2016-01-20T04:16:28.461-0500    exported 323 records

上面显示了已导出 323 条记录,并且您可以在我们指定的 Bronx_Chinese_retaurants.json 文件中找到它们。

结论

本文介绍了将信息导入和导出到 MongoDB 数据库的基本知识。您可以继续阅读《在 Ubuntu 14.04 上备份、恢复和迁移 MongoDB 数据库》和《如何设置可扩展的 MongoDB 数据库》。

复制不仅对可扩展性有用,而且对当前主题也很重要。复制允许您在从故障中恢复主服务器时,从从属 MongoDB 服务器中无间断地继续运行 MongoDB 服务。复制的一部分还是操作日志(oplog),它记录修改数据的所有操作。您可以像在 MySQL 中使用二进制日志一样使用此日志,在最后一次备份后恢复数据。请记住,备份通常在夜间进行,如果您决定在晚上恢复备份,您将错过自上次备份以来的所有更新。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
356 0
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
2月前
|
存储 NoSQL MongoDB
MongoDB 数据库引用
10月更文挑战第20天
21 1
|
2月前
|
存储 NoSQL Shell
MongoDB 创建数据库
10月更文挑战第12天
72 4
|
2月前
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。
|
2月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
288 1
|
2月前
|
存储 NoSQL MongoDB
mongodb的数据库表怎么创建
在此过程中,理解并掌握这些基本操作,是深入探索MongoDB魅力,乃至构建高效数据解决方案的关键所在。通过实践,您将更加深刻地体会到这种随需应变的数据管理模式带来的便利与效率提升。
35 0
|
2月前
|
存储 NoSQL MongoDB
小川科技携手阿里云数据库MongoDB:数据赋能企业构建年轻娱乐生态
基于MongoDB灵活模式的特性,小川实现了功能的快速迭代和上线,而数据库侧无需任何更改
|
2月前
|
运维 NoSQL BI
简道云搭载阿里云MongoDB数据库,帮助数以万计企业重构业务系统
通过与MongoDB和阿里云团队的合作,让简道云少走了弯路,保障了线上服务的长期稳定运行,提高了吞吐效率,并相应降低了线上运行成本