在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 中使用二进制日志一样使用此日志,在最后一次备份后恢复数据。请记住,备份通常在夜间进行,如果您决定在晚上恢复备份,您将错过自上次备份以来的所有更新。

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白如意i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值