在 MongoDB 中复制/克隆数据库
用户可以通过多种方式将集合克隆到同一个 MongoDB 数据库或克隆到另一个 MongoDB 数据库。 这篇 MongoDB 教程文章将讨论用户如何复制/克隆 MongoDB 中的数据库及其数据。
使用 db.collection.copyTo() 命令在 MongoDB 中复制/克隆数据库
此命令使用服务器端 JavaScript 将所有文档从集合复制到 newCollection。 如果集合不存在,MongoDB 会生成一个新集合。
如果启用了权限,您必须对所有资源执行所有操作才能运行 db.collection.copyTo()
。 如果您的业务需要用户运行 db.collection.copyTo()
,请构建一个角色,授予对 anyResource 的 anyAction。
不应为其他用户分配此角色。
参数 | 类型 | 说明 |
---|---|---|
newCollection | string | 写入数据的集合名称。 |
在使用 db.collection.copyTo()
时检查字段类型以验证该操作不会在 BSON 到 JSON 转换期间从文档中删除类型信息。
在内部,db.collection.copyTo()
方法使用 eval 命令。 因此,db.collection.copyTo()
操作采用全局锁定,这会阻止任何其他读取或写入活动,直到 db.collection.copyTo()
操作完成。
复制的文档数由 copyTo()
返回。 如果复制失败,则抛出异常。 因为 copyTo()
在内部使用 eval,所以对 mongod 实例的复制操作将阻止所有其他操作。
例如,以下操作将源集合中的所有文档复制到目标集合中。
db.collection1.copyTo("collection2")
- 此命令只能在 MongoDB 4.0 或更早版本中运行。
- 它仅将集合克隆到同一数据库。
- 它非常慢。
- 它不复制集合属性和索引。
使用 db.collection.find().forEach() 命令在 MongoDB 中复制/克隆数据库
此命令遍历游标,将 JavaScript 函数应用于每个文档。 forEach()方法的原型形式如下:
db.collection.find().forEach(<function>)
forEach()
方法具有以下参数:
参数 | 类型 | 说明 |
---|---|---|
function | JavaScript |
一个 JavaScript 函数,用于从光标应用到每个文档。 <function> 签名包括将当前文档传递给处理的单个参数。 |
例子:
db.collection1.find().forEach(
function(docs){
db.collection2.insert(docs);
})
- 此命令只能将集合克隆到同一台服务器。
- 它非常慢。
- 它不复制集合属性和索引。
使用 mongodump 和 mongorestore 工具在 MongoDB 中复制/克隆数据库
要在早期版本的 MongoDB 中复制数据库,您可以使用 copyDB 命令或其辅助方法 db.copyDatabase()
。 但是,MongoDB 随后弃用了这些。
此外,从 4.2 版开始,MongoDB 删除了 copydb 命令和 db.copyDatabase()
方法,因此如果您使用 MongoDB 4.2 或更高版本,您将无法使用它们。 但是,有一种不同的方法来复制 MongoDB 数据库。
MongoDB 数据库工具可用于在 MongoDB 中克隆数据库。 您可以使用命令 mongodump 和 mongorestore。
MongoDB Database Tools 是一组用于处理 MongoDB 的命令行工具。 如果不确定是否安装了 MongoDB 数据库工具,请使用终端或命令提示符检查:
mongodump --version
mongorestore --version
这段代码主要是查找mongodump和mongorestore的版本。 如果您还没有它们,您可以按照 MongoDB 网站上的安装说明在您的 PC 上安装 MongoDB 数据库工具。
您必须使用系统的命令行来运行 mongodump 和 mongorestore(例如,新的终端或命令提示符窗口)。 它不应该从 mongo shell 中执行。
这是数据库克隆代码的示例:
mongodump --archive --db=CatHotel | mongorestore --archive --nsFrom='CatHotel.*' --nsTo='CatHouse.*'
在这种情况下,我们备份 CatHotel 数据库,然后将其所有集合恢复到名为 CatHouse 的数据库中。 换句话说,我们将 CatHotel 数据库克隆为 CatHouse。
这使用 mongodump 生成数据库备份文件,然后使用 mongorestore 以新名称恢复数据库。 首先,数据库被转储到标准输出流中并通过管道传输到 mongorestore 中。
以下是每个参数的作用:
参数 | 说明 |
---|---|
archive | 如果未指定存档文件,它将输出写入指定的存档文件或标准输出(stdout)。 在您的情况下,未指定存档文件,因此它将写入标准输出。 |
db | 它将指定要备份的数据库。 在这种情况下,您将备份 CatHotel 数据库。 |
nsFrom |
会指定转储文件中的集合。 星号通配符 (* ) 表示所有集合。 |
nsTo | 指定恢复数据库中需要使用的集合名称。 |
您还可以使用 mongodump 转储所有数据库并在不带任何参数的情况下运行它。 但是,当您这样做时,本地和配置数据库不会包含在转储中。
- 这是一种高速方法。
- 它可以将集合克隆到另一个数据库和服务器。
使用 mongoexport 和 mongoimport 工具在 MongoDB 中复制/克隆数据库
MongoDB 工具包包括 mongoexport 和 mongoimport 工具。 该工具包可从 MongoDB 下载中心下载。
例如,在命令行中运行以下命令:
mongoexport.exe /host:<host> /port:<port> /db:test /collection:collection1 /out:collection1.json
mongoimport.exe /host:<host> /port:<port> /db:test /collection:collection2 /file:collection1.json
- 这是一种快速的方法。
- 它可以将集合克隆到不同的数据库和服务器。
- 它不复制集合属性和索引。
NoSQL Manager for MongoDB 的重复收集工具
重复收藏是一项专业功能。 它允许在同一个数据库中非常快速地复制集合。
右键单击 DB Explorer 中的 collection1 集合,然后在弹出菜单中选择 Duplicate collection1 Collection 项。
指定目标集合名称、复制参数,然后单击“复制”。
- 这是一种高速方法。
- 它复制集合属性和索引。
- 它只能将集合克隆到同一个数据库。
将集合复制到 NoSQL Manager for MongoDB 的另一个数据库工具
将集合复制到另一个数据库是 NoSQL Manager for MongoDB Pro 的专业功能。 它允许在数据库和服务器之间复制一个或多个集合。
在 DB Explorer 中右键单击 collection1,然后在弹出菜单中选择 Copy collection1 Collection to another Database 项。
指定目标数据库和其他参数,然后单击执行。
- 这是一种快速的方法。
- 它复制集合属性和索引。
- 它可以将集合复制到另一个数据库和服务器。
- 它可以一次复制多个集合。
- 它不能重命名集合。
相关文章
在 MongoDB Shell 中列出所有数据库
发布时间:2023/05/11 浏览次数:75 分类:MongoDB
-
交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。
MongoDB 中检查字段包含的字符串
发布时间:2023/05/11 浏览次数:137 分类:MongoDB
-
这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。
在 MongoDB 中 upsert 更新插入
发布时间:2023/05/11 浏览次数:162 分类:MongoDB
-
在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。
如何卸载 MongoDB
发布时间:2023/05/11 浏览次数:180 分类:MongoDB
-
要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便
在 MongoDB 中存储日期和时间
发布时间:2023/05/11 浏览次数:199 分类:MongoDB
-
本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。
MongoDB 按 ID 查找
发布时间:2023/05/11 浏览次数:139 分类:MongoDB
-
MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。
检查 MongoDB 服务器是否正在运行
发布时间:2023/05/11 浏览次数:127 分类:MongoDB
-
这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。
MongoDB 中的分页
发布时间:2023/05/11 浏览次数:140 分类:MongoDB
-
这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。
MongoDB 从查询开始
发布时间:2023/05/11 浏览次数:135 分类:MongoDB
-
在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。