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
。
兼容性
MongoDB 服务器兼容性
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
命令的组件
选项。您可以使用一个或多个这些选项来控制
mongofiles
的行为。命令。使用这些命令之一来确定
mongofiles
的操作。一个标识符,可以是:您本地文件系统上的文件名,或 GridFS 对象。
重要
对于 副本集,mongofiles
只能从集的 主节点 读取。
所需访问权限
为了连接到启用了mongod
授权选项的数据库,您必须使用--auth
,并且需要使用--username
和--password
选项。连接的用户必须至少拥有
行为
FIPS
mongofiles
自动创建与配置为使用 FIPS 模式的 mongod
/mongos
的 FIPS 兼容连接。
读取偏好
默认情况下,mongofiles
使用读取偏好 primary
。要覆盖默认设置,您可以在命令行选项中指定 读取偏好,或者在 --readPreference
或 --uri
连接字符串中。
如果您在 URI 字符串和 --readPreference
中指定了读取偏好,则 --readPreference
的值将覆盖 URI 字符串中指定的读取偏好。
写关注
您可以选择使用--writeConcern
和--uri
连接字符串选项。如果使用这两个选项都指定了写关注,则--writeConcern
值将覆盖URI字符串中指定的写关注。
选项
--help
返回有关
mongofiles
选项和使用的信息。
--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
错误信息。如果是这种情况,请改用以下选项之一
--host=<hostname><:port>
指定一个可解析的主机名,该主机名用于您的
mongod
GridFS系统。默认情况下,mongofiles
尝试连接到本地主机端口27017
上运行的MongoDB进程。可选地,指定一个端口号以连接到运行在非27017端口的MongoDB实例。
--ssl
启用与已启用TLS/SSL支持的
mongod
或mongos
的连接。或者,您也可以直接在
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
选项连接到已启用mongod
或mongos
的CAFile
并未启用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 将使用无效证书的情况记录为警告。警告
或者,您也可以直接在
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
实例用于认证到mongod
或mongos
的认证机制。变更版本100.1.0: 从版本
100.1.0
开始,mongofiles
在连接到 MongoDB Atlas 集群时添加了对MONGODB-AWS
认证机制的支持。值描述RFC 5802 使用 SHA-1 哈希函数的标准加盐挑战响应认证机制。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)或者,您还可以直接在
URI连接字符串
中指定认证机制。同时使用--authenticationMechanism
并指定冲突信息将导致错误。
--gssapiServiceName=<serviceName>
使用GSSAPI/Kerberos指定服务名称。如果服务不使用默认名称
mongodb
,则此选项是必需的。此选项仅在MongoDB Enterprise中可用。
--gssapiHostName=<hostname>
使用 GSSAPI/Kerberos 指定服务的主机名。仅在机器的主机名与 DNS 解析出的主机名不匹配时才需要。
此选项仅在MongoDB Enterprise中可用。
--db=<database>, -d=<database>
指定运行
mongofiles
. 的数据库名称。
--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>
默认值: 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
将使用此文件名。如果只指定一个
filename
到get
命令,您可以使用--local
选项来指定不同的本地文件名进行写入,如果需要的话。在指定多个filename
到get
命令的情况下,不能使用--local
选项。注意
要复制匹配正则表达式的GridFS存储文件,请使用
get_regex
命令。
get_id "<_id>"
将指定
<_id>
的文件从GridFS存储复制到本地文件系统。<_id>
指的是GridFS中对象的扩展JSON_id
。get_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
周围加上引号。
使用AWS IAM凭据连接到MongoDB Atlas集群
新版本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>
注意
或者,可以使用--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>