作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。
介绍
MongoDB 是最流行的 NoSQL 数据库引擎之一。它以可扩展、强大、可靠和易于使用而闻名。在本文中,我们将向您展示如何导入和导出 MongoDB 数据库。
我们应该明确,导入和导出是指以人类可读的格式处理数据的操作,与其他软件产品兼容。相比之下,备份和还原操作会创建或使用 MongoDB 特定的二进制数据,从而保持数据的一致性和完整性及其特定的 MongoDB 属性。因此,对于迁移,只要源系统和目标系统兼容,通常最好使用备份和还原。
备份、还原和迁移任务超出了本文的范围。有关更多信息,请参阅如何在 Ubuntu 20.04 上备份、还原和迁移 MongoDB 数据库。
先决条件
要完成本教程,您将需要以下内容:
- 根据Ubuntu 20.04 初始服务器设置指南设置了一个 Ubuntu 20.04 Droplet ,包括一个 sudo 非 root 用户和一个防火墙。
- 使用文章如何在 Ubuntu 20.04 上安装 MongoDB 来安装和配置MongoDB。
- 了解 MongoDB 中 JSON 和 BSON 数据之间的差异。有关详细讨论,请阅读我们的教程如何在 Ubuntu 20.04 上备份、恢复和迁移 MongoDB 数据库中的第一步 — 在 MongoDB中使用 JSON 和 BSON。
第 1 步 – 将信息导入 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
结果将如下所示:
Output2020-11-11T19:37:55.607+0000 connected to: mongodb://localhost/
2020-11-11T19:37:57.841+0000 25359 document(s) imported successfully. 0 document(s) failed to import
如上命令所示,已导入25359个文档。因为我们没有名为 的数据库newdb
,所以 MongoDB 自动创建了它。
让我们验证导入。
连接到新创建的newdb
数据库:
- sudo mongo newdb
您现在已连接到newdb
数据库实例。请注意,您的提示已更改,表明您已连接到数据库。
使用以下命令计算 restaurant 集合中的文档:
- db.restaurants.count()
结果会显示25359
,这是导入的文档数。为了更好地检查,您可以从餐厅集合中选择第一个文档,如下所示:
- db.restaurants.findOne()
结果将如下所示:
Output{
"_id" : ObjectId("5fac3d937f12c471b3f26733"),
"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 用户身份返回到正常的命令行提示符。
步骤 2 — 从 MongoDB 导出信息
正如我们之前提到的,通过导出 MongoDB 信息,您可以获得包含数据的人类可读文本文件。默认情况下,信息以 json 格式导出,但您也可以导出为 csv(逗号分隔值)。
要从 MongoDB 导出信息,请使用命令mongoexport
。它允许您导出非常细粒度的导出,以便您可以指定数据库、集合、字段,甚至可以使用查询进行导出。
一个简单的mongoexport
例子是从newdb
我们之前导入的数据库中导出餐馆集合。可以这样做:
- sudo mongoexport --db newdb -c restaurants --out newdbexport.json
在上面的命令中,我们用于--db
指定数据库、-c
集合和--out
保存数据的文件。
成功的输出mongoexport
应如下所示:
Output2020-11-11T19:39:57.595+0000 connected to: mongodb://localhost/
2020-11-11T19:39:58.619+0000 [###############.........] newdb.restaurants 16000/25359 (63.1%)
2020-11-11T19:39:58.871+0000 [########################] newdb.restaurants 25359/25359 (100.0%)
2020-11-11T19:39:58.871+0000 exported 25359 records
上面的输出显示已导入 25359 个文档 — 与导入的文档数量相同。
在某些情况下,您可能只需要导出集合的一部分。考虑到餐厅 json 文件的结构和内容,让我们导出所有满足位于布朗克斯区并有中餐条件的餐厅。如果我们想在连接到 MongoDB 时直接获取此信息,请再次连接到数据库:
- sudo mongo newdb
然后,使用此查询:
- db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )
结果显示在终端上:
Output- 2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
- 2020-12-03T01:35:25.410+0000 exported 323 records
要退出 MongoDB 提示,请键入exit
:
- exit
如果您想从 sudo 命令行而不是在连接到数据库时导出数据,请mongoexport
通过为-q
参数指定它来使上一个查询成为命令的一部分,如下所示:
- sudo mongoexport --db newdb -c restaurants -q "{\"borough\": \"Bronx\", \"cuisine\": \"Chinese\"}" --out Bronx_Chinese_retaurants.json
请注意,我们\
在查询中使用反斜杠 ( )转义双引号。同样,您必须转义查询中的任何其他特殊字符。
如果导出成功,结果应如下所示:
Output2020-11-11T19:49:21.727+0000 connected to: mongodb://localhost/
2020-11-11T19:49:21.765+0000 exported 323 records
上面显示导出了323条记录,可以在Bronx_Chinese_retaurants.json
我们指定的文件中找到。
使用cat
和less
扫描数据:
- cat Bronx_Chinese_retaurants.json | less
用于SPACE
翻阅数据:
Output- date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
-
- . . .
按q
退出。您现在可以导入和导出 MongoDB 数据库。
结论
本文向您介绍了在 MongoDB 数据库中导入和导出信息的基本知识。您可以继续进一步阅读如何在 Ubuntu 20.04 上备份、恢复和迁移 MongoDB 数据库。
您也可以考虑使用复制。复制允许您从从属 MongoDB 服务器不间断地继续运行 MongoDB 服务,同时从故障中恢复主服务器。复制的一部分是操作日志(oplog),它记录了所有修改你数据的操作。您可以使用此日志,就像使用 MySQL 中的二进制日志一样,在上次备份发生后恢复数据。回想一下,备份通常在夜间进行,如果您决定在晚上恢复备份,您将丢失自上次备份以来的所有更新。