mongo 命令行

2020-04-24 17:40:27 浏览数 (1)

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包:

  1. 打开下载中心。对于企业mongo Shell,选择MongoDB Enterprise Server选项卡。
  2. 从下拉框选择适合您的版本和操作系统。
  3. 选择适合您的操作系统进行下载:
  • 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实例运行在远程主机上:
代码语言:javascript复制
mongo "mongodb://mongodb0.example.com:28015"
  • 您可以使用命令行选项---host <host>:<port>。例如,连接远程主机的MongoDB实例:
代码语言:javascript复制
mongo --host mongodb0.example.com:28015
  • 您可以使用—— --host <host>--port <port>命令行选项进行连接。例如,连接远程主机的MongoDB实例:
代码语言:javascript复制
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副本集

连接到副本集

  • 您可以在连接字符串中指定副本集名称和成员。
代码语言:javascript复制
mongo "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA"
  • 如果使用DNS Seedlist连接格式,您可以在连接字符串中指定:
代码语言:javascript复制
mongo "mongodb srv://server.example.com/"

注意

使用 srv字符串修正符进行连接,会自动设置ssl选项为true。

  • 您可以指定副本集名称和成员以——host<副本集名称> / < host1 >: 、< host2 >: ,……命令行方式。例如,连接到名称为replA的副本集:
代码语言:javascript复制
mongo --host replA/mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017

TLS/SSL连接

TLS/SSL连接时,

  • 您可以在连接字符串中指定ssl = true。
代码语言:javascript复制
mongo "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA&ssl=true"
  • 如果使用DNS Seedlist连接格式,在连接字符串中要包含 srv串修饰符:
代码语言:javascript复制
mongo "mongodb srv://server.example.com/"

注意

使用 srv字符串修正符进行连接,会自动设置ssl选项为true。

  • 您可以指定--ssl命令行选项。例如,连接到名称为replA的副本集:
代码语言:javascript复制
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”开头的方法:
代码语言:javascript复制
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/

0 人点赞