Docs 菜单
Docs 主页
/
MongoDB 数据库工具

mongofiles

在此页面上

  • Synopsis
  • 兼容性
  • 安装
  • 语法
  • 必需的访问权限
  • 行为
  • 选项
  • 命令
  • 示例

mongofiles实用程序可以从命令行操作存储在GridFS对象中的 MongoDB 实例中的文件。 它特别有用,因为它在文件系统中存储的对象和 GridFS 之间提供了接口。

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

从 MongoDB 4.4 开始,mongofiles 现在会与 MongoDB Server 分开发布,并使用自己的版本控制功能(初始版本为 100.0.0)。以前,mongofiles 会与 MongoDB Server 一起发布,并使用匹配式版本控制。

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

注意

指向较旧文档的快速链接

本文档适用于mongofiles100.10.0版本。

mongofiles版本100.10.0支持以下版本的 MongoDB Server:

  • MongoDB 8.0

  • MongoDB 7.0

  • MongoDB 6.0

  • MongoDB 5.0

  • MongoDB 4.4

  • MongoDB 4.2

虽然mongofiles可能适用于早期版本的 MongoDB Server,但不保证一定兼容。

以下平台支持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 database工具包的一部分:

➤ 按照 Database Tools 安装指南安装 mongofiles

mongofiles 命令采用以下形式:

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

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

mongofiles命令的组成部分包括:

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

  2. Connection String 。 要与string 连接的mongod /mongos 的连接mongofiles

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

  4. 标识符:本地文件系统上的文件名或 GridFS 对象。

重要

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

要连接到使用mongod 选项执行授权的--auth ,您必须使用--username--password 选项。连接用户必须至少具备:

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

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

mongofiles 会自动创建连接到已配置为使用 FIPS 模式mongod/mongos 并且符合 FIPS 标准的连接。

默认情况下,mongofiles 使用读取偏好 primary。要覆盖默认值,可以在 --readPreference 命令行选项或 --uri connection string 中指定读取偏好

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

您可以同时指定--writeConcern--uri connection string选项。 如果使用这两个选项指定写关注,则--writeConcern值将覆盖 URI string中指定的写关注。

--help

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

--verbose, -v

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

--quiet

在尝试限制输出量的安静模式下运行 mongofiles

该选项会抑制:

--version

返回 mongofiles 版本号。

--config=<filename>

版本 100.3.0 中的新增内容

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

除通过密码提示来指定密码之外,这是为 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]]"

mongofiles100.0 版本开始,也可以将连接string作为位置参数提供,而无需使用--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 格式文档。

注意

connection string 中的某些组件也可以使用各自的显式命令行选项来指定,例如 --username--password。在提供连接字符串的同时,使用显式选项并指定冲突信息会导致错误。

注意

如果在 Ubuntu 18.04 上使用 mongofiles,那么在使用 SRV 连接字符串mongodb+srv:// 形式)和 --uri 选项时,可能会出现 cannot unmarshal DNS 错误信息。如果是这样,请改用以下选项之一:

警告

在某些系统上,使用 --uri 选项在连接字符串中提供的密码,可能会被其他用户调用的系统状态程序(如 ps )探测到。请考虑:

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

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

--host=<hostname><:port>

为保存 GridFS 系统的 mongod 指定可解析的主机名。默认情况下,mongofiles 会尝试连接到在本地主机端口号 27017 上运行的 MongoDB 进程。

可以选择指定端口号,以连接在 27017 以外的端口上运行的 MongoDB 实例。

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

--port=<port>

默认值:27017

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

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

--ssl

支持链接到启用 TLS/SSL 支持的 mongodmongos

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

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

--sslCAFile=<filename>

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

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

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

--sslPEMKeyFile=<filename>

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

使用--ssl选项连接到已启用CAFile且未启用allowConnectionsWithoutCertificatesmongodmongos时,需要使用此选项。

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

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

--sslPEMKeyPassword=<value>

指定解密证书密钥文件的密码(即 --sslPEMKeyFile)。仅当证书密钥文件已加密时才能使用 --sslPEMKeyPassword 选项。在所有情况下,mongofiles 都会从所有日志记录和报告输出中编辑密码。

如果 PEM 文件中的私钥已加密并且您未指定--sslPEMKeyPassword选项,则mongofiles将提示输入密码。 请参阅TLS/SSL 证书密码。

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

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

警告

在某些系统上,直接使用 --sslPEMKeyPassword 选项提供的密码,可能会被其他用户调用的系统状态程序(如 ps)探测到。可以考虑使用 --config 选项,指定一个包含密码的配置文件。

--sslCRLFile=<filename>

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

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

--sslAllowInvalidCertificates

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

警告

尽管可用,但请尽可能避免使用 --sslAllowInvalidCertificates 选项。如果需要使用 --sslAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。

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

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

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

--sslAllowInvalidHostnames

禁用 TLS/SSL 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持 mongofiles 连接到 MongoDB 实例。

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

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

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

指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与 --password--authenticationDatabase 选项配合使用。

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

如果使用 MONGODB-AWS authentication mechanism 连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 访问密钥 ID:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

--password=<password>, -p=<password>

指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与 --username--authenticationDatabase 选项结合使用。

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

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

如果使用 MONGODB-AWS authentication mechanism 连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 秘密访问密钥:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

警告

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

  • 省略 --password 选项,从而接收交互式密码提示,或

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

--awsSessionToken=<AWS Session Token>

如果使用 MONGODB-AWSauthentication mechanism 连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

仅在使用 MONGODB-AWS authentication mechanism 时有效。

--authenticationDatabase=<dbname>

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

如果使用的是 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或 MONGODB-AWS authentication mechanisms,则须将 --authenticationDatabase 设为 $external

或者,也可以直接在 URI connection string 中指定身份验证数据库。在提供连接字符串的同时使用 --authenticationDatabase 并指定冲突信息将导致错误。

--authenticationMechanism=<name>

默认值:SCRAM-SHA-1

指定 mongofiles 实例用于向 mongodmongos 进行身份验证的身份验证机制。

在版本 100.1.0 中进行了更改。从版本 100.1.0 开始,mongofiles 在连接到 MongoDB Atlas 集群时增加了对 MONGODB-AWS 身份验证机制的支持。

说明

RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism

需将 featureCompatibilityVersion 设为 4.0

MongoDB TLS/SSL 证书身份验证。
MONGODB-AWS

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

100.1.0 版本新增

GSSAPI (Kerberos)
使用 Kerberos 的外部身份验证。此机制仅在 MongoDB Enterprise 中可用。
普通版 (LDAP SASL)
使用 LDAP 进行外部身份验证。也可使用 PLAIN 对数据库内用户进行身份验证。PLAIN 以纯文本形式传输密码。此机制仅在 MongoDB Enterprise 中可用。

或者,也可以直接在 URI connection string 中指定身份验证机制。在提供连接字符串的同时使用 --authenticationMechanism 并指定冲突信息将导致错误。

--gssapiServiceName=<serviceName>

使用 GSSAPI/Kerberos 指定服务名称。仅当服务未使用默认名称 mongodb 时才需要。

此选项仅在 MongoDB Enterprise 中可用。

--gssapiHostName=<hostname>

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

此选项仅在 MongoDB Enterprise 中可用。

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

指定在其上运行 mongofiles 的数据库的名称。

或者也可以直接在 URI connection string 中指定数据库。在提供连接字符串的同时使用 --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>

默认:多数

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

使用w 选项将写关注指定为文档:

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

如果写关注也包含在--uri connection string中,则命令行--writeConcern将覆盖 URI string中指定的写关注。

--readPreference=<string|document>

默认值primary

指定 的 读取偏好 mongofiles--readPreference选项可以使用:

  • 如果仅指定读取偏好模式,则为一个字符串:

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

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

    如果指定 maxStalenessSeconds,该值则须大于或等于 90。

mongofiles默认为primary读取偏好。

如果读取偏好也包含在--uri connection string中,则命令行--readPreference将覆盖 URI string中指定的读取偏好。

list <prefix>

列出 GridFS 存储中的文件。list之后指定的字符(例如<prefix>)可以选择将返回的项目列表限制为以该字符串开头的文件。

search <string>

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

put <filename1[ filename2] ...>

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

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

get <filename1[ filename2] ...>

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

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

如果仅为 get 命令指定一个 filename,那么您可以根据需要使用 --local 选项指定要写入的其他本地文件名。如果为 get 命令指定超过一个 filename,那么您无法使用 --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>

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

您可以选择使用--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 数据库中GridFS集合内所有文件的列表,请在系统shell中使用以下调用:

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

要从名为 32-corinth.lprecords 数据库中的 GridFS 集合获取文件,可以使用以下命令:

mongofiles -d=records get 32-corinth.lp

要从 records数据库的 GridFS 集合中获取名称以字符串 32 开头并以字符串 .lp 结尾的所有文件,可使用以下命令:

mongofiles -d=records get_regex 32*.lp

要使用 _id: ObjectId("56feac751f417d0357e7140f")records 数据库中的 GridFS 集合提取文件,可以使用以下命令:

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

您必须在 _id 两边加上引号。

100.1.0 版本新增

要连接到已配置为支持通过 AWS IAM 凭证进行身份验证的 MongoDB Atlas 集群,请提供与以下内容类似的 connection stringmongofiles

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 authentication mechanism$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 authentication mechanism 时,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>

后退

示例