使用 API 进行配置设置
config
API提供了检查和更新 mongosh
配置的方法。 使用config
API进行的更新在会话之间持续存在。
注意
可以在mongosh
命令行界面中使用config
API。 它在嵌入式 Compass shell 中没有影响。
语法
打印当前的mongosh
配置:
config
返回 <property>
的当前值:
config.get( "<property>" )
将 <property>
的当前设置更改为 <value>
:
config.set( "<property>", <value> )
将<property>
重置为默认值:
config.reset( "<property>" )
支持的property
参数
键 | 类型 | 默认 | 说明 |
---|---|---|---|
displayBatchSize | 整型 | 20 | 每次游标迭代显示的项目数 |
enableTelemetry | 布尔 | true | 允许将匿名跟踪和诊断数据发送到 MongoDB。 |
editor | 字符串 | null | 指定要在 mongosh 控制台中使用的编辑器。如果已设置,则重写 EDITOR 环境变量。 |
forceDisableTelemetry | 布尔 | false | 仅在全局配置文件中可用。如果为 true,则用户无法手动启用遥测。 |
historyLength | 整型 | 1000 | 要存储在 mongosh REPL 的历史记录文件中的项目数。 |
inspectCompact | 整数或布尔值 | 3 | |
inspectDepth | 整数或无穷大 | 6 | 打印对象的深度。将 inspectDepth 设置为 Infinity (JavaScript 对象)会将所有嵌套对象打印到其完整深度。 |
redactHistory | 字符串 | remove | 控制 Shell 历史记录中记录哪些信息。必须是以下任一项:
|
showStackTraces | 布尔 | false | 控制堆栈跟踪和错误信息的显示。 |
snippetAutoload | 布尔 | true | 如果为 true ,则在启动时自动加载已安装的代码片段。 |
snippetIndexSourceURLs | 字符串 | 以分号分隔的链接到代码片段注册表的 URL 列表。 | |
snippetRegistryURL | 字符串 |
行为
从历史记录中删除或编辑敏感信息
mongosh
“尽最大努力”尝试匹配通常对应于某些类型的敏感信息的模式。
存在匹配的模式:
证书和密钥
电子邮件地址
通用用户目录
HTTP(s) URL
IP 地址
MongoDB连接字符串
某些操作(例如connect()
)被视为本质敏感操作。 如果将redactHistory
设立为remove
或remove-redact
,则执行这些操作的行将命令行历史记录中删除。
其他操作(如 find()
)有时会包含电子邮件地址等敏感信息。除非将 redactHistory
设置为 remove-redact
,否则 shell 历史记录将保留输入的这些行。
使用配置文件的行为
使用 config
API 指定的设置:
覆盖配置文件中指定的设置。
重启后仍然存在。
例子
考虑以下配置文件,其将inspectDepth
设置为20
:
mongosh: inspectDepth: 20
在 mongosh
会话期间,运行以下命令将 inspectDepth
设置为 10
:
config.set( "inspectDepth", 10 )
inspectDepth
的值变为10
,并且即使重新启动mongosh
也将保持为10
。
示例
更新游标返回的项目数
考虑查看包含许多大型文档的集合。 您可以更新batchSize
以限制游标返回的项目数。
config.set("displayBatchSize", 3)
未来的 db.collection.find()
操作每次游标迭代仅返回 3 个文档。
开启堆栈跟踪
启用堆栈跟踪以查看更详细的错误报告。
config.set("showStackTraces", true)
输出有所不同,如下所示:
// showStackTraces set to 'false' Enterprise> db.orders.find( {}, { $thisWontWork: 1 } ) MongoError: FieldPath field names may not start with '$'. // showStackTraces set to 'true' Enterprise> db.orders.find( {}, { $thisWontWork: 1 } ) Uncaught: MongoError: FieldPath field names may not start with '$'. at MessageStream.messageHandler (/usr/bin/mongosh:58878:20) at MessageStream.emit (events.js:315:20) at MessageStream.EventEmitter.emit (domain.js:548:15) at processIncomingData (/usr/bin/mongosh:57954:12) at MessageStream._write (/usr/bin/mongosh:57850:5) at writeOrBuffer (_stream_writable.js:352:12) at MessageStream.Writable.write (_stream_writable.js:303:10) at Socket.ondata (_stream_readable.js:719:22) at Socket.emit (events.js:315:20) at Socket.EventEmitter.emit (domain.js:548:15)
从外部调用config
APImongosh
您可以使用 --eval
和 mongosh
从命令行调用 config
API。在本例中,--nodb
选项表示 mongosh
将在不连接 MongoDB database 的情况下进行更新。
重要
必须为 --eval
表达式和 config
属性使用不同的引号。也就是说,一个用单引号,另一个用双引号。
mongosh --nodb --eval 'config.set("enableTelemetry", true)'
mongosh
返回附加信息以及API调用结果。
Current Mongosh Log ID: 609583b730e14918fa0d363f Using MongoDB: undefined Using Mongosh Beta: 0.12.1 For mongosh info see: https://www.mongodb.com/zh-cn/docs/mongodb-shell/ Setting "enableTelemetry" has been changed
编辑敏感信息
比较当 redactHistory
设置为 remove-redact
或 remove
时调用的历史记录。
将redactHistory
设置为remove-redact
模式并输入包含电子邮件解决的查询。
config.set( "redactHistory", "remove-redact" ) db.contacts.find( {"email": "customer@clients.com" } )
当您按下 up arrow
重播最后一个命令时,将删除电子邮件地址。
db.contacts.find( {"email": "<email>" } ) // Redacted
将redactHistory
设置为remove
模式并输入包含电子邮件解决的查询。
config.set( "redactHistory", "remove" ) db.contacts.find( {"email": "customer@clients.com" } )
当您按下 up arrow
重放最后一条命令时,电子邮件地址就会出现。
db.contacts.find( {"email": "customer@clients.com" } )
shell历史记录会反映这些更改。 (请注意,这会首先存储最近输入的内容。)
db.contacts.find( {"email": "customer@clients.com" } ) config.set( "redactHistory", "remove" ) db.contacts.find( {"email": "<email>" } ) config.set( "redactHistory", "remove-redact" )
将配置设置重置为默认值
如果修改了配置设置并希望将其重置为默认值,请使用config.reset( "<property>" )
。
将
historyLength
设置的值更改为2000
:config.set("historyLength", 2000) 验证
historyLength
的更新值:config.get("historyLength") 将
historyLength
设置重置为1000
默认值:config.reset("historyLength") 验证
historyLength
的更新值:config.get("historyLength")