quosdolorem
Version:
The MongoDB Shell
259 lines (200 loc) • 7.62 kB
Markdown
# @mongosh/cli-repl
[Evergreen Build][evergreen-url]
CLI interface for [MongoDB Shell][mongosh], an extension to Node.js REPL with MongoDB API.
## Usage
```shell
$ mongosh [options] [db address]
Options:
-h, --help Show this usage information
--host [arg] Server to connect to
--port [arg] Port to connect to
--version Show version information
--shell Run the shell after executing files
--nodb Don't connect to mongod on startup - no 'db address' [arg] expected
--norc Will not run the '.mongoshrc.js' file on start up
--eval [arg] Evaluate javascript
--retryWrites Automatically retry write operations upon transient network errors
Authentication Options:
-u, --username [arg] Username for authentication
-p, --password [arg] Password for authentication
--authenticationDatabase [arg] User source (defaults to dbname)
--authenticationMechanism [arg] Authentication mechanism
--awsIamSessionToken [arg] AWS IAM Temporary Session Token ID
TLS Options:
--tls Use TLS for all connections
--tlsCertificateKeyFile [arg] PEM certificate/key file for TLS
--tlsCertificateKeyFilePassword [arg] Password for key in PEM file for TLS
--tlsCAFile [arg] Certificate Authority file for TLS
--tlsAllowInvalidHostnames Allow connections to servers with non-matching hostnames
--tlsAllowInvalidCertificates Allow connections to servers with invalid certificates
--tlsCertificateSelector [arg] TLS Certificate in system store (Windows and macOS only)
--tlsDisabledProtocols [arg] Comma separated list of TLS protocols to disable [TLS1_0,TLS1_1,TLS1_2]
FLE Options:
--awsAccessKeyId [arg] AWS Access Key for FLE Amazon KMS
--awsSecretAccessKey [arg] AWS Secret Key for FLE Amazon KMS
--awsSessionToken [arg] Optional AWS Session Token ID
--keyVaultNamespace [arg] database.collection to store encrypted FLE parameters
--kmsURL [arg] Test parameter to override the URL of the KMS endpoint
API version options:
--apiVersion [arg] Specifies the API version to connect with
--apiStrict Use strict API version mode
--apiDeprecationErrors Fail deprecated commands for the specified API version
DB Address Examples:
foo Foo database on local machine
192.168.0.5/foo Foo database on 192.168.0.5 machine
192.168.0.5:9999/foo Foo database on 192.168.0.5 machine on port 9999
mongodb://192.168.0.5:9999/foo Connection string URI can also be used
File Names:
A list of files to run. Files must end in .js and will exit after unless --shell is specified.
Examples:
Start mongosh using 'ships' database on specified connection string:
$ mongosh mongodb://192.168.0.5:9999/ships
For more information on usage: https://docs.mongodb.com/mongodb-shell.
```
### Log Format
CLI REPL listens to a few events via a message bus that are then logged to
user's local log file in `~/.mongodb/mongosh/` in ndjson format using
[pino][pino-js].
### bus.on('mongosh:connect', connectEvent)
Where `connectionInfo` is an object with the following interface:
```ts
interface ConnectEvent {
driverUri: string;
}
```
Used to log and send telemetry about connection information. Sensitive
information is stripped beforehand.
Example:
```js
bus.emit('mongosh:connect', {
driverUri: 'mongodb://192.168.0.5:9999/ships'
})
```
### bus.on('mongosh:new-user', userID, enableTelemetry)
Where `userID` is a [BSON ObjectID][object-id] and `enableTelemetry` is a boolean flag.
This is used for telemetry tracking when the user initially uses mongosh.
Example:
```js
bus.emit('mongosh:new-user', '12394dfjvnaw3uw3erdf', true)
```
### bus.on('mongosh:update-user', id, enableTelemetry)
Where `userID` is a [BSON ObjectID][object-id] and `enableTelemetry` is a boolean flag.
This is used internally to update telemetry preferences and userID in the
logger.
Example:
```js
bus.emit('mongosh:update-user', '12394dfjvnaw3uw3erdf', false)
```
### bus.on('mongosh:error', error)
Where `error` is an [Error Object][error-object]. Used to log and send telemetry
about errors that are _thrown_.
Example:
```js
bus.emit('mongosh:error', new Error('Unable to show collections'))
```
### bus.on('mongosh:help')
Used when `help` command was used.
Example:
```js
bus.emit('mongosh:help')
```
### bus.on('mongosh:rewritten-async-input', inputInfo)
Used for internal debugging of async-rewriter. `inputInfo` is an object with the
following interface:
```ts
interface AsyncRewriterEvent {
original: string;
rewritten: string;
}
```
Example:
```js
bus.emit('mongosh:rewritten-async-input', {
original: 'db.coll.find().forEach()',
rewritten: 'await db.coll.find().forEach();'
})
```
### bus.on('mongosh:use', args)
Used for recording information about `use`. `args` has the following interface:
```ts
interface UseEvent {
db: string;
}
```
Example:
```js
bus.emit('mongosh:use', { db: 'cats' })
```
### bus.on('mongosh:show', args)
Used for recording information about `show` command. `args` has the following
interface:
```ts
interface ShowEvent {
method: string;
}
```
Example:
```js
bus.emit('mongosh:show', { method: 'dbs' })
```
### bus.on('mongosh:it')
Used for recording when `it` command was called.
Example:
```js
bus.emit('mongosh:it')
```
### bus.on('mongosh:api-call', args)
Used for recording information when API calls are made. `args` has the following
interface:
```ts
interface ApiEvent {
method?: string;
class?: string;
db?: string;
coll?: string;
arguments?: ApiEventArguments;
}
```
```ts
interface ApiEventArguments {
pipeline?: any[];
query?: object;
options?: object;
filter?: object;
}
```
`arguments` may contain information about the API call. As a rule, we don't emit
information containing documents coming from API calls such as
`db.coll.insert()` or `db.coll.bulkWrite()` to keep cleaner logs.
`aggregate` Event Example:
```js
this.messageBus.emit('mongosh:api-call', {
method: 'aggregate',
class: 'Collection',
db, coll, arguments: { options, pipeline }
});
```
`runCommand` Event Example:
```js
this.messageBus.emit('mongosh:api-call', {
method: 'runCommand', class: 'Database', db, arguments: { cmd }
});
```
`createIndex` Event Example:
```js
this.messageBus.emit('mongosh:api-call', {
method: 'createIndex',
class: 'Collection',
db, coll, arguments: { keys, options }
});
```
## Local Development
## Installation
```shell
npm install --save @mongosh/cli-repl
```
[mongosh]: https://github.com/mongodb-js/mongosh
[evergreen-url]: https://evergreen.mongodb.com/waterfall/mongosh
[pino-js]: https://github.com/pinojs/pino
[object-id]: https://docs.mongodb.com/manual/reference/method/ObjectId/
[error-object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error