mongofiles
简介
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 文档
:
本文档适用于
mongofiles
的
100.10.0
版本。
兼容性
MongoDB Server 兼容性
mongofiles
版本
100.10.0
支持以下版本的 MongoDB Server:
-
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
|
PPC 64 LE
|
s390x
|
---|---|---|---|---|
Amazon Linux 2023
|
✓ |
✓ |
|
|
Amazon 2
|
✓ |
|
|
|
Amazon 2013.03+
|
✓ |
|
|
|
Debian 10
|
✓ |
|
|
|
Debian 9
|
✓ |
|
|
|
RHEL
/ CentOS 9
|
✓ |
✓ |
|
|
RHEL
/ CentOS 8
|
✓ |
|
✓ |
|
RHEL
/ CentOS 7
|
✓ |
|
✓ |
✓ |
RHEL
/ CentOS 6
|
✓ |
|
|
|
SUSE 15
|
✓ |
|
|
|
SUSE 12
|
✓ |
|
|
|
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
命令的组成部分包括:
-
选项 。您可以使用一个或多个选项来控制
mongofiles
的行为。 -
Connection String
。 要与string 连接的mongod
/mongos
的连接mongofiles
。 -
命令 。使用这些命令之一来确定
mongofiles
操作。 -
标识符:本地文件系统上的文件名或 GridFS 对象。
重要
对于
副本集
,
mongofiles
只能从该集的
主节点读取。
必需的访问权限
要连接到使用
mongod
选项执行授权的
--auth
,您必须使用
--username
和
--password
选项。连接用户必须至少具备:
行为
FIPS
mongofiles
会自动创建连接到
已配置为使用 FIPS 模式
的
mongod
/
mongos
并且符合 FIPS 标准的连接。
读取偏好
默认情况下,
mongofiles
使用读取偏好
primary
。要覆盖默认值,可以在
--readPreference
命令行选项或
--uri connection string
中指定
读取偏好
。
如果您在 URI 字符串和
--readPreference
中指定读取偏好,则
--readPreference
值将覆盖 URI 字符串中指定的读取偏好。
写关注
您可以同时指定
--writeConcern
和
--uri connection string
选项。 如果使用这两个选项指定写关注,则
--writeConcern
值将覆盖 URI string中指定的写关注。
选项
-
--help
-
返回
mongofiles
的选项和使用的信息。
-
--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]]" 从
mongofiles
的100.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
错误信息。如果是这样,请改用以下选项之一:-
带有 非 SRV 连接字符串 (格式为
mongodb://
)的--uri
选项 -
--host
选项指定直接连接的主机
-
-
--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 支持的
mongod
或mongos
。或者,也可以直接在
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
且未 启用allowConnectionsWithoutCertificates
的mongod
或mongos
时,需要使用此选项。或者,也可以直接在
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 将使用无效证书记录为警告。警告
或者,也可以直接在
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_ACCESS_KEY_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_SECRET_ACCESS_KEY
环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群 ,了解每个凭据的示例。
警告
在某些系统上,直接使用
--password
选项提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。请考虑:-
省略
--password
选项,从而接收交互式密码提示,或 -
使用
--config
选项指定包含密码的配置文件。
-
-
--awsSessionToken=<AWS Session Token>
-
如果使用
MONGODB-AWS
authentication mechanism
连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:-
这个字段,
-
connection string
的AWS_SESSION_TOKEN
authMechanismProperties
参数,或 -
AWS_SESSION_TOKEN
环境变量。
请参阅使用 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
实例用于向mongod
或mongos
进行身份验证的身份验证机制。在版本 100.1.0 中进行了更改 。从版本
100.1.0
开始,mongofiles
在连接到 MongoDB Atlas 集群时增加了对MONGODB-AWS
身份验证机制的支持。值说明使用 SHA-1 哈希函数的 RFC 5802 标准 Salted 质询响应身份验证机制。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)或者,也可以直接在
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 put 和 mongofiles get 命令中,必需的
<filename>
修饰符是指该对象在 GridFS 中采用的名称。mongofiles
假定它反映了此文件在本地文件系统中的名称。此设置将覆盖该默认值。
-
--type=<MIME>
-
提供指定 MIME 类型来描述插入 GridFS 存储的文件的功能。
mongofiles
在默认操作中省略此选项。仅与 mongofiles put 操作一起使用。
-
--replace, -r
-
更改 mongofiles put 的行为,用指定的本地文件替换现有的 GridFS 对象,而不是添加具有相同名称的其他对象。
在默认操作中, mongofiles put 选项不会覆盖文件。
-
--writeConcern=<document>
-
默认 :多数
为 执行的每个写入操作指定 写关注
mongofiles
。--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 存储中。 可以将多个文件指定为以空格分隔的列表。