MongoDB Manual (Version 4.2)> The mongo Shell
- 开始mongo命令行并连接MongoDB
- 用mongo命令行工作
- 命令自动补全和其他键盘快捷键
- .mongorc.js文件
- 退出命令行
mongo shell通过JavaScript接口和MongoDB进行交互。您可以使用mongo shell去查询和更新数据以及执行管理操作。
mongo shell在MongoDB服务安装时就已集成。MongoDB还提供mongo shell作为一个独立的包。下载独立mongo shell包:
- 打开下载中心。对于企业mongo Shell,选择MongoDB Enterprise Server选项卡。
- 从下拉框选择适合您的版本和操作系统。
- 选择适合您的操作系统进行下载:
- windows选择zip包进行下载
- macOS选择TGZ包进行下载
- linux选择shell包进行下载
一旦安装并启动MongoDB,就可以通过mongo shell去运行MongoDB实例。
注意
从MongoDB 4.0.13和4.2版本开始,当连接和官方MongoDB有区别的非官方MongoDB实例时,mongo shell 将提示警告信息,例如缺少或不完整功能,或不一样的功能。
开始用mongo shell
连接 MongoDB
前提
尝试启动mongo shell时,确保MongoDB已经运行。
打开终端窗口(或Windows命令提示符)并进入<安装mongodb 目录 > / bin目录:
代码语言:javascript复制cd <mongodb installation dir>/bin
小提示
添加MongoDB安装目录下的bin目录到系统环境变量中,这样你可以在任何地方执行mongo命令行,而不需要到MongoDB安装目录去执行。
用默认端口连接本地MongoDB实例
默认不添加任何参数,执行如下mongo命令,以27012端口连接MongoDB实例:
代码语言:javascript复制mongo
用非默认端口连接本地实例
以–port 命令行方式指定端口启动MongoDB实例。例如用一个非默认的28015端口启动MongoDB实例:
代码语言:javascript复制mongo --port 28015
连接远程MongoDB实例
指定主机名和/或端口:
- 您可以指定一个连接字符串。例如,连接MongoDB实例运行在远程主机上:
mongo "mongodb://mongodb0.example.com:28015"
- 您可以使用命令行选项-
--host <host>:<port>
。例如,连接远程主机的MongoDB实例:
mongo --host mongodb0.example.com:28015
- 您可以使用——
--host <host>
和--port <port>
命令行选项进行连接。例如,连接远程主机的MongoDB实例:
mongo --host mongodb0.example.com --port 28015
启用身份验证的MongoDB实例
连接到需要身份验证的MongoDB实例:
- 您可以在连接信息中指定用户名、身份验证信息以及密码。例如,连接远程MongoDB实例以alice作为用户进行身份验证
注意
如果您没有在连接字符串中指定密码,shell将提示输入密码:
代码语言:javascript复制mongo "mongodb://alice@mongodb0.examples.com:28015/?authSource=admin"
- 您可以使用
--username <user>
和--password
,--authenticationDatabase <db>
命令行选项进行连接。例如,连接远程MongoDB实例以alice
作为用户进行身份验证。
注意
如果您输入--password后面没有用户密码,shell将提示输入密码:
代码语言:javascript复制mongo --username alice --password --authenticationDatabase admin --host mongodb0.examples.com --port 28015
连接到MongoDB副本集
连接到副本集
- 您可以在连接字符串中指定副本集名称和成员。
mongo "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA"
- 如果使用DNS Seedlist连接格式,您可以在连接字符串中指定:
mongo "mongodb srv://server.example.com/"
注意
使用 srv字符串修正符进行连接,会自动设置ssl选项为true。
- 您可以指定副本集名称和成员以——host<副本集名称> / < host1 >: 、< host2 >: ,……命令行方式。例如,连接到名称为replA的副本集:
mongo --host replA/mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017
TLS/SSL连接
TLS/SSL连接时,
- 您可以在连接字符串中指定ssl = true。
mongo "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA&ssl=true"
- 如果使用DNS Seedlist连接格式,在连接字符串中要包含 srv串修饰符:
mongo "mongodb srv://server.example.com/"
注意
使用 srv字符串修正符进行连接,会自动设置ssl选项为true。
- 您可以指定
--ssl
命令行选项。例如,连接到名称为replA的副本集:
mongo --ssl --host replA/mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017
参见
想获取更多关于连接示例中使用的参数选项以及其他参数选项,可以到mongo参考和启动MongoDB示例中进行查询。
使用mongo shell
查看您所使用的数据库,数据库类型:
代码语言:javascript复制db
该操作会返回测试库,这是默认的数据库。
如下示例,切换数据库使用 use 命令:
代码语言:javascript复制use <database>
在不切换数据库上下文环境的情况下,可以使用 db.getSiblingDB() 访问其他数据库。
使用show dbs列出该用户可用的数据库。[1]
您可以切换到不存在的数据库。当您第一次将数据存储在不存在的数据库中,如创建一个集合,则数据库和集合会一并创建。例如,下面在执行insertOne() 时会创建数据库myNewDatabase和集合myCollection:
代码语言:javascript复制use myNewDatabase
db.myCollection.insertOne( { x: 1 } );
db.myCollection.insertOne()是mongo shell可用的方法之一。
- db是指当前数据库。
- myCollection是集合名词。
如果mongo shell不识别一个集合名称,您可以使用替代语法db.getCollection()。例如,如果一个集合名称包含一个空格或连字符,或以一个数字开头,或与一个内置函数冲突:
代码语言:javascript复制db.getCollection("3 test").find()
db.getCollection("3-test").find()
db.getCollection("stats").find()
mongo shell限制每行4095个字符,如果超过4095个字符,mongo shell会进行截断。
mongo shell中更多关于MongoDB的基本操作,如下:
- Getting Started Guide
- Insert Documents
- Query Documents
- Update Documents
- Delete Documents
- mongo Shell Methods
[1]
如果以访问控制的方式部署运行,根据用户权限的不同会返回不同的结果。有关详细信息,请参阅listDatabases细节。
格式化打印结果
db.collection.find()方法返回一个游标结果;然而,在mongo shell中,如果返回的游标不使用var关键字分配给一个变量,然后光标会自动打印与查询匹配的前20个文档。接着mongo shell将提示输入游标继续打印后面的20个文档。
您可以添加.pretty()来格式打印结果,如下:
代码语言:javascript复制db.myCollection.find().pretty()
此外,您可以在mongo shell使用以下更明确的打印方法:
- print() 打印非格式化的数据
- print(tojson()) 打印json格式数据,和 printjson() 一样
- printjson() 打印json格式数据,和 print(tojson()) 一样
更多关于游标在mongo shell的操作,可以参考在mongo shell中迭代游标章节。也可在mongo shell中查看游标帮助列表。
在mongo Shell多行操作
如果您以(’(’)、(’{’)、(’[’)结束,那么后续行会以省略号(…)开始,直到您输入相应的(’)’)、(’}’)、(’]’)才会结束。mongo shell直到关闭符号(’)’)、(’}’)、(’]’),才会执行,像下面的例子:
代码语言:javascript复制> if ( x > 0 ) {
... count ;
... print (x);
... }
输入两个空行您可以退出行延续模式,像下面的例子:
代码语言:javascript复制> if (x > 0
...
...
>
命令自动补全和其他键盘快捷键
mongo shell支持快捷键:
- 使用向上/向下箭头键滚动命令历史。可以到 .dbshell文档了解更多信息。
- 使用自动完成或者列出可能的列表,如以下示例使用自动补全以字母“c”开头的方法:
db.myCollection.c<Tab>
因为有很多集和方法以字母“c”开头, 将列出各种以“c”开头的方法。
您可以到Shell Keyboard Shortcuts查看完整快捷键列表。
.mongorc.js文件
开始时,MongoDB会检查用户的主目录的一个名为.mongorc.js的JavaScript文件,如果存在,会在第一次命令行提示前执行该js文件。如果用mongo shell 执行JavaScript文件或JavaScript表达式,或者通过–eval执行,或者创建一个a.js文件执行,在这些JavaScript执行完,会执行.mongorc.js 文件。您可以使用–norc 防止.mongorc.js被执行。
退出shell
用 quit()或者快捷键退出shell.
参见
- 入门指南
- mongo参考页
译者:金江 MongoDB中文社区翻译小组成员
原文链接:
https://docs.mongodb.com/manual/mongo/