文档菜单
文档首页
/
MongoDB数据库工具

mongofiles

本页内容

  • 概述
  • 兼容性
  • 安装
  • 语法
  • 所需访问权限
  • 行为
  • 选项
  • 命令
  • 示例

mongofiles 工具允许您通过命令行操作存储在 MongoDB 实例中的 GridFS 对象中的文件。它特别有用,因为它为存储在文件系统中的对象和 GridFS 之间提供了一个接口。

从系统命令行运行 mongofiles,而不是 mongo shell。

从 MongoDB 4.4 版本开始,mongofiles 现在作为 MongoDB 服务器的独立组件发布,并使用自己的版本控制,初始版本为 100.0.0。之前,mongofiles 与 MongoDB 服务器一起发布,并使用匹配的版本控制。

有关 MongoDB 4.2 或更早版本的 mongofiles 的文档,请参阅该版本工具的 MongoDB 服务器文档

注意

快速链接到旧版文档

本文档适用于 mongofiles 的版本 100.10.0

mongofiles 版本 100.10.0 支持 MongoDB 服务器以下版本

  • MongoDB 8.0

  • MongoDB 7.0

  • MongoDB 6.0

  • MongoDB 5.0

  • MongoDB 4.4

  • MongoDB 4.2

虽然 mongofiles 可能可以在更早版本的 MongoDB 服务器上运行,但任何此类兼容性都不能保证。

mongofiles 版本 100.10.0 支持以下平台

x86_64
ARM64
PPC64LE
s390x
Amazon Linux 2023

Amazon 2

Amazon 2013.03+

Debian 12

Debian 11

Debian 10

Debian 9

RHEL / CentOS 9

RHEL / CentOS 8

RHEL / CentOS 7

RHEL / CentOS 6

SUSE 15

SUSE 12

Ubuntu 24.04

Ubuntu 22.04

Ubuntu 20.04

Ubuntu 18.04

Ubuntu 16.04

Windows 8 及以上

Windows Server 2012 及以上

macOS 11 及以上

macOS 10.12 - 10.15

mongofiles 工具是 MongoDB 数据库工具 包的一部分

按照数据库工具安装指南 安装 mongofiles

mongofiles 命令具有以下形式

mongofiles <options> <connection-string> <command> <filename or _id>

从系统命令行运行 mongofiles,而不是 mongo shell。

mongofiles 命令的组件

  1. 选项。您可以使用一个或多个这些选项来控制 mongofiles 的行为。

  2. 连接字符串。与 mongod / mongos 连接的连接字符串。

  3. 命令。使用这些命令之一来确定 mongofiles 的操作。

  4. 一个标识符,可以是:您本地文件系统上的文件名,或 GridFS 对象。

重要

对于 副本集mongofiles 只能从集的 主节点 读取。

为了连接到启用了mongod授权选项的数据库,您必须使用--auth,并且需要使用--username--password选项。连接的用户必须至少拥有

  • 访问数据库的read角色,当使用listsearchget命令时,

  • 访问数据库的readWrite角色,当使用putdelete命令时。

mongofiles 自动创建与配置为使用 FIPS 模式的 mongod/mongos 的 FIPS 兼容连接。

默认情况下,mongofiles 使用读取偏好 primary。要覆盖默认设置,您可以在命令行选项中指定 读取偏好,或者在 --readPreference--uri 连接字符串中。

如果您在 URI 字符串和 --readPreference 中指定了读取偏好,则 --readPreference 的值将覆盖 URI 字符串中指定的读取偏好。

您可以选择使用--writeConcern--uri连接字符串选项。如果使用这两个选项都指定了写关注,则--writeConcern值将覆盖URI字符串中指定的写关注。

--help

返回有关mongofiles选项和使用的信息。

--verbose, -v

增加在标准输出或日志文件中返回的内部报告量。通过多次包含选项来增加详细程度(例如,-vvvvv)。

--quiet

在静默模式下运行 mongofiles,尝试限制输出量。

此选项抑制

  • 以下数据库命令的输出:

  • 复制活动

  • 连接接受事件

  • 连接关闭事件

--version

返回 mongofiles 版本号。

--config=<filename>

版本100.3.0.

指定包含以下选项敏感值的 YAML 配置文件的完整路径: mongofiles

这是除通过密码提示指定之外,指定密码给 mongofiles 的推荐方法。

配置文件具有以下形式

password: <password>
uri: mongodb://mongodb0.example.com:27017
sslPEMKeyPassword: <password>

在“password:”字段指定密码,并在“uri:”字段提供包含冲突密码的连接字符串,会导致错误。

请确保使用适当的文件系统权限来保护此文件。

注意

如果您使用--config指定配置文件,并使用--password--uri--sslPEMKeyPassword选项来运行mongofiles,则每个命令行选项将覆盖配置文件中对应的选项。

--uri=<connectionString>

指定MongoDB部署的可解析URI连接字符串,并用引号括起来

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

mongofiles的100.0版本开始,连接字符串也可以作为位置参数提供,而不使用--uri选项

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

作为一个位置参数,连接字符串可以在命令行的任何位置指定,只要它以mongodb://mongodb+srv://开头。例如

mongofiles --username joe --password secret1 mongodb://mongodb0.example.com:27017 --ssl

只能提供一个连接字符串。尝试使用--uri选项或作为位置参数提供多个连接字符串会导致错误。

有关连接字符串组件的信息,请参阅连接字符串URI格式文档。

注意

连接字符串中的一些组件可以选择使用它们自己的显式命令行选项进行指定,例如--username--password。当同时提供连接字符串并使用显式选项指定冲突信息时,将导致错误。

注意

如果在Ubuntu 18.04上使用mongofiles,使用带有--uri选项的SRV连接字符串(格式为mongodb+srv://)时,可能会遇到无法解析DNS错误信息。如果是这种情况,请改用以下选项之一

  • 使用--uri选项和非SRV连接字符串(格式为mongodb://

  • 使用--host选项直接指定要连接的主机

警告

在某些系统上,通过--uri选项提供的密码可能会被系统状态程序(如ps)看到,这些程序可能被其他用户调用。考虑以下替代方案

  • 在连接字符串中省略密码以接收交互式密码提示,或

  • 使用--config选项指定包含密码的配置文件。

--host=<hostname><:port>

指定一个可解析的主机名,该主机名用于您的mongod GridFS系统。默认情况下,mongofiles尝试连接到本地主机端口27017上运行的MongoDB进程。

可选地,指定一个端口号以连接到运行在非27017端口的MongoDB实例。

或者,您也可以直接在URI连接字符串中指定主机名。当同时提供连接字符串并使用--host并指定冲突信息时,将导致错误。

--port=<端口号>

默认: 27017

指定MongoDB实例监听客户端连接的TCP端口。

或者,您也可以直接在URI连接字符串中指定端口。在提供连接字符串的同时使用--port并指定冲突信息将导致错误。

--ssl

启用与已启用TLS/SSL支持的mongodmongos的连接。

或者,您也可以直接在URI连接字符串中配置TLS/SSL支持。在提供连接字符串的同时使用--ssl并指定冲突信息将导致错误。

有关TLS/SSL和MongoDB的更多信息,请参阅配置mongod和mongos以使用TLS/SSL客户端的TLS/SSL配置。

--sslCAFile=<filename>

指定包含证书颁发机构根证书链的 .pem 文件。使用相对路径或绝对路径指定 .pem 文件的文件名。

或者,您也可以在 URI 连接字符串 中直接指定 .pem 文件。在同时使用 --sslCAFile 并指定冲突信息时,将导致错误。

有关TLS/SSL和MongoDB的更多信息,请参阅配置mongod和mongos以使用TLS/SSL客户端的TLS/SSL配置。

--sslPEMKeyFile=<filename>

指定包含 TLS/SSL 证书和私钥的 .pem 文件。使用相对路径或绝对路径指定 .pem 文件的文件名。

当使用 --ssl 选项连接到已启用 mongodmongosCAFile 并未启用 allowConnectionsWithoutCertificates 时,此选项是必需的。

或者,您也可以在 URI 连接字符串 中直接指定 .pem 文件。在同时使用 --sslPEMKeyFile 并指定冲突信息时,将导致错误。

有关TLS/SSL和MongoDB的更多信息,请参阅配置mongod和mongos以使用TLS/SSL客户端的TLS/SSL配置。

--sslPEMKeyPassword=<value>

指定解密证书密钥文件的密码(即 --sslPEMKeyFile)。只有在证书密钥文件被加密时才使用 --sslPEMKeyPassword 选项。在所有情况下,mongofiles 将从所有日志和报告输出中删除密码。

如果 PEM 文件中的私钥被加密且未指定 --sslPEMKeyPassword 选项,mongofiles 将提示输入密码短语。参见 TLS/SSL 证书密码短语。

或者,您还可以直接在 URI 连接字符串 中指定密码。在同时使用 --sslPEMKeyPassword 并指定冲突信息时,将导致错误。

有关TLS/SSL和MongoDB的更多信息,请参阅配置mongod和mongos以使用TLS/SSL客户端的TLS/SSL配置。

警告

在某些系统上,使用 --sslPEMKeyPassword 选项直接提供的密码可能对系统状态程序(如 ps)可见,这些程序可能由其他用户调用。考虑使用 --config 选项来指定包含密码的配置文件。

--sslCRLFile=<filename>

指定包含证书吊销列表的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。

有关TLS/SSL和MongoDB的更多信息,请参阅配置mongod和mongos以使用TLS/SSL客户端的TLS/SSL配置。

--sslAllowInvalidCertificates

绕过服务器证书的验证检查,允许使用无效证书。当使用 allowInvalidCertificates 设置时,MongoDB 将使用无效证书的情况记录为警告。

警告

虽然可用,但尽可能避免使用 --sslAllowInvalidCertificates 选项。如果必须使用 --sslAllowInvalidCertificates,则仅在入侵不可能的系统上使用该选项。

在不验证服务器证书的情况下连接到 mongodmongos 实例是一种潜在的安全风险。如果您只需要禁用 TLS/SSL 证书中主机名的验证,请参阅 --sslAllowInvalidHostnames

或者,您也可以直接在 URI 连接字符串 中禁用证书验证。当同时使用 --sslAllowInvalidCertificates 并指定冲突信息时,将导致错误。

有关TLS/SSL和MongoDB的更多信息,请参阅配置mongod和mongos以使用TLS/SSL客户端的TLS/SSL配置。

--sslAllowInvalidHostnames

禁用TLS/SSL证书中对主机名的验证。允许 mongofiles 连接到MongoDB实例,即使它们的证书中的主机名与指定的主机名不匹配。

或者,您也可以直接在URI连接字符串中禁用主机名验证。在使用--sslAllowInvalidHostnames的同时提供连接字符串并指定冲突信息将导致错误。

有关TLS/SSL和MongoDB的更多信息,请参阅配置mongod和mongos以使用TLS/SSL客户端的TLS/SSL配置。

--username=<username>, -u=<username>

指定一个用于验证连接到使用认证的MongoDB数据库的用户名。与--password--authenticationDatabase选项一起使用。

或者,您也可以直接在URI连接字符串中指定用户名。在使用--username的同时提供连接字符串并指定冲突信息将导致错误。

如果您使用MONGODB-AWS 认证机制连接到MongoDB Atlas集群,您可以在以下字段中指定您的AWS访问密钥ID:

  • 该字段,

  • 连接字符串中,或

  • AWS_ACCESS_KEY_ID环境变量中。

有关每个示例的详细信息,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群

--password=<密码>, -p=<密码>

指定用于验证连接到使用身份验证的MongoDB数据库的密码。与--username--authenticationDatabase选项一起使用。

要提示用户输入密码,请使用不带--password--username选项,或者将--password的值指定为空字符串,例如--password ""

或者,您也可以直接在URI连接字符串中指定密码。同时提供连接字符串并使用--password并指定冲突信息将导致错误。

如果您使用MONGODB-AWS身份验证机制连接到MongoDB Atlas集群,可以在

  • 该字段,

  • 连接字符串中,或

  • AWS_SECRET_ACCESS_KEY环境变量中指定您的AWS密钥访问密钥。

有关每个示例的详细信息,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群

警告

在某些系统上,直接使用--password选项提供的密码可能会被系统状态程序(如ps)看到,这些程序可能由其他用户调用。考虑不使用

  • --password选项以接收交互式密码提示,或者

  • 使用--config选项指定包含密码的配置文件。

--awsSessionToken=<AWS 会话令牌>

如果您正在使用 MongoDB Atlas 集群,并通过 MONGODB-AWS 认证机制 连接,并且除了您的 AWS 访问密钥 ID 和密钥之外还使用会话令牌,您可以在

有关每个示例的详细信息,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群

仅在使用 MONGODB-AWS 认证机制 时有效。

--authenticationDatabase=<dbname>

指定已创建指定 --username 的认证数据库。请参阅 认证数据库。

如果使用 GSSAPI(Kerberos)、PLAIN(LDAP SASL)或 MONGODB-AWS 认证机制,您必须将 --authenticationDatabase 设置为 $external

或者,您还可以在 URI 连接字符串 中直接指定认证数据库。在同时使用 --authenticationDatabase 并指定冲突信息时,将会产生错误。

--authenticationMechanism=<name>

默认:SCRAM-SHA-1

指定 mongofiles 实例用于认证到 mongodmongos 的认证机制。

变更版本100.1.0: 从版本 100.1.0 开始,mongofiles 在连接到 MongoDB Atlas 集群时添加了对 MONGODB-AWS 认证机制的支持。

描述

RFC 7677 标准的盐值挑战响应认证机制,使用SHA-256哈希函数。

需要将特征兼容性版本设置为 4.0

MongoDB TLS/SSL证书认证。
MONGODB-AWS

使用AWS IAM凭据进行外部认证,用于连接到MongoDB Atlas集群。请参阅使用AWS IAM凭据连接到MongoDB Atlas集群

版本100.1.0.

GSSAPI (Kerberos)
使用Kerberos进行外部认证。此机制仅在MongoDB Enterprise.
PLAIN (LDAP SASL)
使用LDAP进行外部认证。您还可以使用PLAIN对数据库用户进行认证。PLAIN以明文形式传输密码。此机制仅在MongoDB Enterprise.

或者,您还可以直接在URI连接字符串中指定认证机制。同时使用--authenticationMechanism并指定冲突信息将导致错误。

--gssapiServiceName=<serviceName>

使用GSSAPI/Kerberos指定服务名称。如果服务不使用默认名称mongodb,则此选项是必需的。

此选项仅在MongoDB Enterprise中可用。

--gssapiHostName=<hostname>

使用 GSSAPI/Kerberos 指定服务的主机名。仅在机器的主机名与 DNS 解析出的主机名不匹配时才需要。

此选项仅在MongoDB Enterprise中可用。

--db=<database>, -d=<database>

指定运行 mongofiles. 的数据库名称。

或者,您也可以直接在 URI 连接字符串 中指定数据库。在同时使用 --db 并指定冲突信息时,将导致错误。

--local=<filename>, -l=<filename>

指定用于获取和放置操作的本地文件系统文件名。

mongofiles putmongofiles get 命令中,必需的 <filename> 修饰符指的是对象在 GridFS 中的名称。 mongofiles 假定这反映了本地文件系统的文件名。此设置会覆盖此默认值。

--type=<MIME>

提供指定 MIME 类型的能力,以描述插入到 GridFS 存储中的文件。 mongofiles 在默认操作中省略此选项。

仅与 mongofiles put 操作一起使用。

--replace, -r

修改 mongofiles put 的行为,以用指定的本地文件替换现有的 GridFS 对象,而不是添加一个具有相同名称的额外对象。

在默认操作中,文件不会被 mongofiles put 选项覆盖。

--prefix=<string>

默认值: fs

使用的 GridFS 前缀。

--writeConcern=<document>

默认值: majority

指定 mongofiles 执行的每个写操作的 写关注

将写关注指定为包含 w 选项 的文档:

--writeConcern="{w:'majority'}"

如果写关注也包含在 --uri 连接字符串 中,命令行 --writeConcern 将覆盖 URI 字符串中指定的写关注。

--readPreference=<string|document>

默认值: primary

指定 读取偏好mongofiles--readPreference 选项可以接受:

  • 如果仅指定读取偏好模式,则可以是一个字符串。

    --readPreference=secondary
  • 一个用引号括起来的文档,用于指定模式、可选的 读取偏好标签集 和可选的 maxStalenessSeconds:

    --readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ], maxStalenessSeconds: 120}'

    如果指定了 maxStalenessSeconds,则其值必须大于或等于 90。

mongofiles 默认为 primary 读取偏好

如果读取偏好也包含在 --uri 连接字符串 中,则命令行 --readPreference 会覆盖 URI 字符串中指定的读取偏好。

list <prefix>

列出 GridFS 存储中的文件。在 list 后指定的字符(例如,<prefix>)可以可选地限制返回的项目列表,只包括以该字符串开头的文件。

search <string>

列出 GridFS 存储中名称与 <string> 的任何部分匹配的文件。

put <filename1[ filename2] ...>

将指定的文件或文件从本地文件系统复制到 GridFS 存储。可以指定多个文件,作为空格分隔的列表。

每个指定的文件名指的是对象在 GridFS 中的名称,并且 mongofiles 假设这反映了文件在本地文件系统中的名称。如果本地文件名不同,请使用 mongofiles --local 选项。

get <filename1[ filename2] ...>

将指定的文件或文件从GridFS存储复制到本地文件系统。

每个指定的文件名指的是对象在GridFS中的名称,并且当写入本地文件系统时,mongofiles将使用此文件名。

如果只指定一个filenameget命令,您可以使用--local选项来指定不同的本地文件名进行写入,如果需要的话。在指定多个 filenameget命令的情况下,不能使用--local选项。

注意

要复制匹配正则表达式的GridFS存储文件,请使用get_regex命令。

get_id "<_id>"

将指定<_id>的文件从GridFS存储复制到本地文件系统。<_id>指的是GridFS中对象的扩展JSON _idget_id可以接受<_id>的ObjectId值或非ObjectId值。

mongofiles将文件写入本地文件系统,使用GridFS中的文件名。要选择本地文件系统上的不同位置,请使用--local选项。

get_regex <regex> --regexOptions <regex-options>

从GridFS存储复制匹配指定<regex>表达式的文件或文件到本地文件系统。get_regex命令使用与Perl兼容的正则表达式("PCRE")版本8.42,具有UTF-8支持。

您可以使用--regexOptions标志可选地指定一个或多个<regex-options>。这些可以是$regex运算符支持的任何选项,包括大小写不敏感等设置。多个选项应一起提供,不带分隔符,例如--regexOptions si

mongofiles将文件或文件写入本地文件系统,使用每个文件在GridFS中匹配的文件名。您不能使用--local选项与get_regex命令一起使用。

delete <filename>

从GridFS存储删除指定的文件。

delete_id "<_id>"

从GridFS存储删除指定<_id>的文件。delete_id可以接受<_id>的ObjectId值或非ObjectId值。

从系统命令行运行 mongofiles,而不是 mongo shell。

要返回“records”数据库中所有文件的列表,请在系统外壳中使用以下调用

mongofiles -d=records list

mongofiles实例将连接到运行在本地主机27017接口上的mongod实例,以指定在端口或主机名不同的操作上执行相同的操作,并发出类似于以下命令的命令

mongofiles --port=37017 -d=records list
mongofiles --host=db1.example.net -d=records list
mongofiles --host=db1.example.net --port=37017 -d=records list

如果需要连接到不同端口或主机上的mongod实例,请根据需要修改以下任何命令。

要将名为32-corinth.lp的文件上传到“records”数据库中的GridFS集合,可以使用以下命令

mongofiles -d=records put 32-corinth.lp

要从“records”数据库中的此GridFS集合删除32-corinth.lp文件,可以使用以下命令

mongofiles -d=records delete 32-corinth.lp

要搜索在“records”数据库的GridFS集合中具有名称包含字符串corinth的文件,可以使用以下命令

mongofiles -d=records search corinth

要列出所有在“records”数据库的GridFS集合中名称以字符串32开头的文件,可以使用以下命令

mongofiles -d=records list 32

要从“records”数据库的GridFS集合中检索名为32-corinth.lp的文件,可以使用以下命令

mongofiles -d=records get 32-corinth.lp

要从“records”数据库的GridFS集合中检索所有以字符串32开头并以字符串.lp结尾的文件,可以使用以下命令

mongofiles -d=records get_regex 32*.lp

要从“records”数据库的GridFS集合中检索具有_id: ObjectId("56feac751f417d0357e7140f")的文件,可以使用以下命令

mongofiles -d=records get_id '{"$oid": "56feac751f417d0357e7140f"}'

必须在_id周围加上引号。

版本100.1.0.

要连接到一个已配置为通过MongoDB Atlas集群,该集群支持通过AWS IAM凭据进行身份验证,请为连接字符串提供类似于以下内容的mongofiles

mongofiles 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS' <other options>

使用这种方式通过AWS IAM凭据连接到Atlas使用的是MONGODB-AWS 身份验证机制$external authSource,如本示例所示。

如果使用AWS会话令牌,也需要提供AWS_SESSION_TOKEN authMechanismProperties的值,如下所示

mongofiles 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>' <other options>

注意

如果AWS访问密钥ID、秘密访问密钥或会话令牌包含以下字符

: / ? # [ ] @

这些字符必须使用百分编码

或者,可以使用--username--password和可选的--awsSessionToken选项在连接字符串外部提供AWS访问密钥ID、秘密访问密钥和会话令牌,如下所示

mongofiles 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS' --username <aws access key id> --password <aws secret access key> --awsSessionToken <aws session token> <other options>

当作为命令行参数提供时,这三个选项不需要百分编码。

您还可以使用标准的AWS IAM环境变量在您的平台上进行设置。当使用MONGODB-AWS 认证机制时,mongofiles会检查以下环境变量。

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN

如果设置了这些凭据,则不需要在连接字符串或通过其显式选项中指定。

注意

如果您选择使用AWS环境变量来指定这些值,则不能将这些凭据的对应显式或连接字符串选项混合使用。要么使用环境变量为访问密钥ID 秘密访问密钥( 如果使用则还会使用会话令牌),或者 使用显式或连接字符串选项指定这些凭据。

以下示例在bash shell中设置这些环境变量。

export AWS_ACCESS_KEY_ID='<aws access key id>'
export AWS_SECRET_ACCESS_KEY='<aws secret access key>'
export AWS_SESSION_TOKEN='<aws session token>'

在其它shell中设置环境变量的语法可能会有所不同。有关更多信息,请参阅您平台的相关文档。

您可以使用以下命令验证这些环境变量是否已设置。

env | grep AWS

设置后,以下示例使用这些环境变量连接到MongoDB Atlas集群。

mongofiles 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS' <other options>

返回

示例

© . All rights reserved.