使用带有标准 Mongo URI 的 mongodump

Using mongodump with a standard Mongo URI

mongo 客户端可以使用标准 URI 连接:

mongo mongodb://<dbuser>:<dbpassword>@<server>:<port>/<db>

然而,mongodump 似乎需要一种笨拙的语法将其分解为不同的参数:

mongodump -u dbuser -p dbpassword -h server -p port -d db ...

是否也有快速简便的方法将 URI 传递给 mongodump

--uri 选项是在 MongoDB 3.4.6 的次要版本中添加的。这在 JIRA 问题 TOOLS-1587.

中被引用

它实际上直到 MongoDB 3.6 版本才获得官方文档,但它是 now in the manual page

--uri
New in version 3.4.6.

Specify a resolvable URI connection string for the mongod to which to connect.

The following is the standard URI connection scheme:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

For detailed explanations of the components of this string, refer to the Connection String URI Format documentation.

相同的 --uri 选项已添加到其他工具,例如 mongoexport, mongoimport and mongorestore

即使您提供了 uri 选项,您仍然需要提供 db 选项。 https://docs.mongodb.com/manual/reference/program/mongorestore/ 处的文档说 db 选项是 "incompatible" 和 uri 选项是不正确的。如果您没有同时提供 db 选项和 uri 选项,您尝试恢复的每个 .bson 文件都会出现 don't know what to do with file 错误。我在 ubuntu 和 mac osx.

上使用 mongorestore 版本 3.6.9 进行了测试

答案:2020-05-15

我知道这是一个迟到的答案,但它解决了我的问题。
要使用 URI 进行转储,请执行:

mongodump --uri=[uri]/[db]

其中:

  • uri 是您的 URI(例如 mongodb+srv://john:xxxxxxxxxxxxxxx@cluster0-jdtjt.mongodb.net
  • db 是您要转储的数据库(例如 sales

所以在这个人为的例子中,它会是这样的:

mongodump --uri=mongodb+srv://john:xxxxxxxxxxxxxxx@cluster0-jdtjt.mongodb.net/sales

因此,如果这真的不起作用,请编辑文件 /etc/resolv.conf 并将 nameserver 值更改为例如8.8.8.8,像这样:

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

# nameserver 127.0.0.53
nameserver 8.8.8.8
options edns0

现在应该可以了。

简单易懂的字符串

mongodump --uri='mongodb://...url/...db-name' --out $(pwd)

mongodump --uri='mongodb+srv://...url/...db-name' --out $(pwd)

根据您的实施,将转储位于 $(url) 的 $(db-name) 的整个数据库,并将内容放入您当前的工作目录 $(pwd)

在任何数据丢失的情况下立即转储和恢复整个数据库的简单步骤

在本地机器上转储

mongodump --uri "mongodb+srv://username:password@dbexmplae-fsddf.igt.mongodb.net/dbname" --out "C:\databaseDump"

**定位到转储文件夹并恢复到本地数据库**

mongorestore --db dbname C:\databaseDump\dbname

恢复到远程数据库

mongorestore --uri "mongodb+srv://username:password@dbexmplae-fsddf.igt.mongodb.net/dbname" --db dbname C:\databaseDump\dbname