The mongosh console is line oriented. However, you can
also use an editor to work with multiline functions. There are two
options:
Use the
editcommand with an external editor.Use the
.editorcommand, a built-in editor.
Using an External Editor
The mongosh edit command works with an external
editor. You can configure an external editor in the shell that runs
mongosh or from within mongosh.
If editors are configured in both locations, the editor configured
within mongosh will take precedence.
To set an editor within mongosh, use the
config.set() command.
config.set( "editor", "vi" )
See setting the external editor for more examples.
You can use edit in three ways:
Start a New Editing Session
Enter edit by itself to start a new editing session.
edit
If you start an editing session without any arguments, the editor opens with the last edit loaded. See the example, Editing a Command.
Edit a Variable
If an argument exists in the console namespace, you can use edit to
update it.
var albums = [ ]; edit albums
The variable
albumsis set in the first line.The second line opens the external editor to edit the value of
albums.
Edit a Statement
To edit a statement in the external editor, invoke edit with a
statement such as db.collection.insertMany().
edit db.digits.insertMany( [] )
After editing db.music.insertMany( [] ) and exiting the external
editor, the mongosh console might look like this:
prompt> db.digits.insertMany([{ "zero": 0 }, { "one": 1 }, { "two": 2 }])
When you exit the external editor, the statement is copied to the
console input line, ready to run. It does not run automatically.
Press <enter> to run the statement or <ctrl> + c to cancel it.
Using the Built-in Editor
The .editor command provides basic multiline editing capabilities.
The editor does not save code. When you close the built-in editor, your edits are loaded into the global scope. If your edit calls any functions or commands, they will run when you close the editor.
To start the built-in editor:
.editor
Enter <ctrl> + d to exit and run your function.
Examples
Set the External Editor
If the EDITOR environment variable is set in the shell running
mongosh, the edit command will use that editor.
If the mongosh editor property is also set,
mongosh will use that program instead. The editor
property overrides the EDITOR environment variable.
Set the EDITOR environment variable
The environment variable should be set before starting
mongosh.
Set an environment variable in bash or zsh:
export EDITOR=vi
The vi editor will open when you run edit in the
mongosh console.
Set the editor Property
To set nano as the editor from within mongosh, use
the config.set() command.
config.set( "editor", "nano" )
The nano editor will open when you run edit in the
mongosh console.
Note
mongosh will attempt to use whatever program is
configured. A program like less will work. Other programs, such
as grep, may crash or have unexpected results.
Editing a Command
Use edit to start an editing session. If the editor was already
used in the current console session, the editor opens the last edit.
The following statement has a syntax error. The highlighted line is missing a comma:
// WARNING: This code contains an error db.users.insertMany( [ { "name": "Joey", "group": "sales" } { "name": "Marie", "group": "sales" }, { "name": "Elton", "group": "accounting" }, { "name": "Paola", "group": "marketing" } ] )
To set up the example:
Copy the example code.
Enter
editto start an editing session.Paste the example code into the editor.
Exit the editor.
Press
enter.
When you exit the editor, it copies the example code to the command
line. mongosh returns an error when the code runs.
To reload the example code, enter edit without any arguments.
// WARNING: This code contains an error db.users.insertMany([{ "name": "Joey", "group": "sales" } { "name": "Marie", "group": "sales" }, { "name": "Elton", "group": "accounting" }, { "name": "Paola", "group": "marketing" } ])
The code is reformatted for easier editing. In this case the missing comma in the highlighted line causes the documents to be misaligned.
Using Visual Studio as an External Editor
Visual Studio requires a special parameter to work as an external
editor. Use --wait with Visual Studio.
Set an environment variable:
export EDITOR="/usr/local/bin/code --wait"
You can also set the editor with config.set(). If Visual Studio is in your PATH, open
mongosh and run:
config.set("editor", "code --wait")
If you use Visual Studio, you can also use the MongoDB VS Code Extension.
Unset the External Editor
Unset the editor variable in mongosh:
config.set("editor", null)
If the EDITOR environment is configured, unset it as well. From
mongosh, run:
process.env.EDITOR = ''
If you unset EDITOR using process.env the change will not
persist after exiting mongosh. To make the change
persistent, unset EDITOR from your shell.
Using the Built-In Editor
Start the editor:
.editor
mongosh enters editor mode. Enter your code:
// Entering editor mode (^D to finish, ^C to cancel) var albums = [ { "artist": "Beatles", "album": "Revolver" }, { "artist": "The Monkees", "album": "Head"} ] db.music.insertMany( albums )
To leave the editor,
Press
<ctrl> + dto exit and run your functionPress
<ctrl> + cto exit without running your function
Objects which are declared using .editor, like albums in this
example, are added to the global scope. They are available after
.editor closes.