怎么运用MongoDB shell

简介

像MongoDB这样的数据库体系一般与一个外部应用程序一同运用,该应用程序衔接到数据库服务器并履行操作,如读取和处理数据或写入新条目。在这样的情况下,你并没有直接与数据库服务器进行交互。不过,要在数据库上履行办理使命或自己履行临时的数据库查询,或许需求直接拜访。

这便是_MongoDB shell_的效果。MongoDB shell是一个交互式控制台,你能够用来衔接到数据库服务器并在上面履行指令,答应你履行办理使命,并直接读、写或操作数据。MongoDB shell使你能够从一个指令行提示符衔接到数据库,并从一个终端窗口交互式地处理它。它还答应你运转外部脚本以更方便地履行重复的使命。

在本教程中,你将运用MongoDB shell衔接到MongoDB数据库并以交互办法查询数据库。你还将运用 shell 中包含的内置协助体系和主动完结功用。

前提条件

要学习本教程,你将需求。

  • 一台有一般的、非root用户的、具有sudo 权限的服务器,以及一个配置了UFW的防火墙。本教程运用运转Ubuntu 20.04的服务器进行验证,你能够依照Ubuntu 20.04的初始服务器设置教程来准备你的服务器。
  • 在你的服务器上装置MongoDB。要设置这个,请遵从咱们的教程:如安在Ubuntu 20.04上装置MongoDB。
  • 你的服务器的MongoDB实例经过启用认证和创立一个办理用户来保证安全。要像这样维护MongoDB,请遵从咱们的教程:如安在Ubuntu 20.04上维护MongoDB。

留意:关于怎么配置服务器、装置和维护MongoDB装置的链接教程是指Ubuntu 20.04。本教程专注于MongoDB自身,而不是底层操作体系。它一般适用于任何MongoDB的装置,无论其操作体系怎么,只要认证被启用。

第1步 – 衔接到MongoDB服务器

为了翻开MongoDB shell,在服务器提示符下运转mongo 指令。默许情况下,mongo 指令会翻开一个衔接到本地装置的 MongoDB 实例的 shell,该实例运转在27017 端口。

试着运转mongo 指令,没有其他参数。

mongo

这将打印出一个欢迎信息,其间包含关于shell所衔接的服务器的一些信息,以及所装置的MongoDB的版别。下面的比如表明MongoDB服务器运转在127.0.0.1 (代表localhost的回环接口)上,位于MongoDB的默许端口(27017),而且运转版别4.4.6。

OutputMongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6

在该信息下面,将呈现MongoDB shell的提示–用一个大于号表明–。

测验列出服务器上一切可用的数据库。在shell提示后输入show dbs ,然后按ENTER

show dbs

假定你遵从了《怎么维护MongoDB》的前提教程,这个指令不会回来任何输出。其原因是,尽管MongoDB服务器正在运转,而且shell能够衔接到它,但你没有供给任何认证信息。正因为如此,你没有拜访权限来处理任何服务器数据库,而且show dbs 指令没有回来任何成果。

经过键入退出shell。

exit

Mongo shell将打印一个简略的离别信息,并让你回来到体系shell。

Outputbye

留意:不输入exit 指令,另一种关闭shell的办法是按CTRL + C

现在测验从头衔接MongoDB shell到数据库服务器,但这次要供给一个用户名和暗码来正确地验证你的MongoDB实例。要做到这一点,你需求供给额外的指令行参数,如下面的比如。

mongo -u AdminSammy -p --authenticationDatabase admin

这个指令由几个部分组成。

  • -u :这个标志设置了用于验证进入MongoDB服务器的用户名。这个比如指定了在先决条件的MongoDB安全教程中创立的办理用户,AdminSammy。在本教程中,假如有不同的办理用户,你能够用你自己的办理用户的用户名来替代它。
  • -p :这个标志告知MongoDB shell在衔接数据库时运用一个暗码。在你按下ENTER 之后,终端窗口会提示你供给一个暗码。
  • --authenticationDatabase :这个选项指定了你要登录的用户的认证数据库。一般情况下,办理账户是在admin 数据库中办理的,但假如你的用户的认证数据库是不同的,请输入该数据库以替代admin

留意:要衔接到运转在不同于localhost的机器上的MongoDB服务器,你能够在shell指令中增加-h 标志,后边跟上你的服务器的IP地址。

输入装置时设置的暗码,你将再次获得对shell的拜访。

现在再试着履行一次show dbs 指令。

show dbs

这一次,该指令将回来体系中一切可用数据库的列表。

Outputadmin   0.000GB
config  0.000GB
local   0.000GB

因为你现已作为一个特权用户进行了认证,shell将答应你在这些数据库中的任何一个运转指令。

现在你现已运用MongoDB shell成功衔接到MongoDB服务器,你能够继续学习如安在shell中履行指令。

第2步 – 履行指令

与其他指令行界面一样,MongoDB shell接受指令并将所需成果回来到标准输出。如前所述,在MongoDB shell中,一切的指令都被输入到以大于号表明的指令提示符中(>)。在指令后按下ENTER ,会当即履行该指令并将指令输出回来到屏幕上。

MongoDB数据库中的大多数指令都是在一个数据库或选定数据库中的一个调集上履行的。当时挑选的数据库由经过shell拜访的db 目标表明。你能够经过在shell中输入db 来查看当时挑选的数据库。

db

在一个新衔接的shell实例中,被选中的数据库总是被称为test

Outputtest

你能够安全地运用这个数据库来实验MongoDB和MongoDB shell。要切换到另一个数据库,你能够运转use 指令,后边跟上新的数据库称号。测验切换到一个叫做fruits 的数据库。

use fruits

shell会通知你,你现在正在运用新的数据库。

Outputswitched to db fruits

你能够经过再次输入db ,找到当时挑选的数据库的称号来验证这一点。

db

这一次,输出将反映新的数据库。

Outputfruits

留意,你没有明确地创立fruits 数据库。MongoDB答应你在尚不存在的数据库和调集上运转指令;它只在目标首次刺进时才创立这些结构。即便你现已成功地将当时数据库改为fruits ,这个数据库还不存在。

试着经过向其刺进一个目标来创立这个数据库。下面的比如概述了怎么将一个目标刺进到数据库中的一个名为apples 的调集。经过增加这个目标,该操作将一起创立fruits 数据库和apples 调集。

在MongoDB shell中键入以下行,然后按ENTER 。留意高亮显现的调集称号(apples)。

db.apples.insert(

在一个开放的括号后按下ENTER ,将发动一个多行指令提示符,答应你在多行中输入更长的指令。在你输入完毕括号之前,insert 指令不会挂号为完结。在你这样做之前,提示符会从大于号变成省略号(...)。

你不需求像这样把MongoDB指令分红多行,但这样做能够使长的指令更简单阅览和了解。

鄙人一行,在一对大括号内输入目标 ({})。这个比如文件只要一个字段和值对。

{name: 'Red Delicious'}

当你再次按下ENTER ,将显现另一行提示,答应你增加进一步的指令参数,如其他文件或MongoDB的insert 办法答应的任何规格。不过关于这个比如来说,你能够经过输入一个闭合括号并按下ENTER ,来完毕输入并运转操作。

)

这时,Mongo shell会挂号insert 指令的完毕并履行整个语句。

OutputWriteResult({ "nInserted" : 1 })

在将这个新目标刺进数据库后,fruits 数据库和apples 调集都将存在。用show dbs 指令查看可用数据库的列表。

show dbs

相同,这将回来一切可用数据库的列表,但这次的列表包含fruits 数据库。

Outputadmin   0.000GB
config  0.000GB
fruits  0.000GB
local   0.000GB

要检索当时挑选的数据库中可用的调集列表,show collections 指令就派上用场了。

show collections

因为fruits 数据库被选中,它将只回来新创立的apples 调集。

Outputapples

就这样,你现已学会了如安在MongoDB shell中履行指令。你还创立了一个样本目标,它又创立了一个新的数据库和一个新的调集,现在现已耐久化在服务器上。

在本攻略的最终一步,你将学习怎么调用MongoDB shell的协助功用,以便更好地了解指令并更简单地履行它们。

第3步 – 从shell中获得交互式协助

MongoDB shell有一个内置的协助体系,你能够用它来获取关于数据库体系的可用指令和存储在其间的目标的信息。这个介绍性的协助屏幕能够在shell提示符下直接用help 指令拜访。

help

MongoDB shell会回来一个更具体的协助条目列表,你能够用它来了解shell的更多具体部分,以及一些最常用指令的比如。

Output        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        sh.help()                    sharding helpers
        rs.help()                    replica set helpers
        help admin                   administrative help
        help connect                 connecting to a db help
        help keys                    key shortcuts
        help misc                    misc things to know
        help mr                      mapreduce
        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time >= 1ms
        show logs                    show the accessible logger names
        show log [name]              prints out the last segment of log in memory, 'global' is default
        use <db_name>                set current database
        db.mycoll.find()             list objects in collection mycoll
        db.mycoll.find( { a : 1 } )  list objects in mycoll where a == 1
        it                           result of the last line evaluated; use to further iterate
        DBQuery.shellBatchSize = x   set default number of items to display on shell
        exit                         quit the mongo shell

在这个比如的输出中杰出显现的前两个条目,别离说明了怎么为当时数据库和当时数据库中的一个调集履行help 指令。给出的示例调集称号是mycoll ,但能够运用任何有用的调集称号。

最终杰出显现的一行 –db.mycoll.find() – 是运用find 指令从一个调集中检索目标的一个比如,它列出了给定调集中的目标。因为调集是Mongo数据库中最常用的一些结构,这一步将介绍怎么运用Mongo的find()help() 调集级办法。

首先,拜访apples 调集的协助屏幕,找到这个调集的可用指令。

db.apples.help()

**留意:**尽管开端的协助指令仅仅help ,但当对数据库和调集目标履行_协助办法_时,你必须在指令后边加上一对圆括号,这样它就会读作help() ,而不仅仅是help

这个指令的输出将是一个冗长的可用指令列表,你能够在apples 调集上履行这些指令。

OutputDBCollection help
        db.apples.find().help() - show DBCursor help
        db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
        db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
        db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
        db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
                                                      e.g. db.apples.find( {x:77} , {name:1, x:1} )
        db.apples.find(...).count()
        db.apples.find(...).limit(n)
        db.apples.find(...).skip(n)
        db.apples.find(...).sort(...)
. . .

除了你能够在db.apples 调集上履行的可用指令的纯粹列表(每条指令后边都有给定指令的简略描绘),这个协助屏幕还给出了常常运用的指令的运用比如,如find()

这个捆绑的协助体系能够作为可用指令的一个有用的参阅。你能够用它来查看你的语法,以防你不记得某个指令的准确拼写或可接受的字段。

因为你现已从协助屏幕上了解到find() 能够用来从一个调集中检索目标,你现在能够测验检索你在上一步中在apples 调集中创立的目标。

然而,这个比如将着重MongoDB的另一个交互式协助东西,即_指令完结_。MongoDB shell遵从其他流行的shell(如Bashzsh )中的模式,按键盘上的TAB 键将主动完结你正在输入的任何指令。

开端输入以下内容,但先不要按ENTER

db.a

不要输入调集的全称,而是按键盘上的TAB 键。MongoDB shell将回应以a 开端的一切可用或许性的列表。

Output> db.a
db.adminCommand(  db.aggregate(     db.apples         db.auth(

这个输出列出了三个指令,用一个开头的括号表明,以及apples 的调集。

在shell中再键入一个字母。

db.ap

再按一次TAB 。这一次,没有其他以ap 开端的或许性,MongoDB shell 会主动完结这个条目,为你输入db.apples 。依照相同的准则,运用TAB 完结find() 指令。输入fi ,但不要按ENTER

db.apples.fi

TAB ,将主动把指令称号完结为 db.apples.find.此刻,再次按下TAB ,会使shell列出更多的或许性,但你能够手动增加一个闭合括号来履行find 指令。

db.apples.find()

shell将显现一个在apples 调集中发现的一切目标的列表。这里将只要一个目标,便是你之前刺进的那个。

Output{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }

就这样,你现已学会了怎么运用内置的协助体系和Mongo shell的主动完结功用。

总结

经过阅览这篇文章,你现已熟悉了MongoDB shell。经过shell,你能够在数据库中刺进新的目标,查询现有的调集,并履行办理数据库、其数据和用户的办理使命。

MongoDB shell能够直接拜访Mongo的大部分功用,如数据库和调集目标和办法,使其成为与数据库服务器互动的首要东西。然而,在以编程办法运用MongoDB时,相同的功用和办法也能够运用,能够经过MongoDB shell脚本或经过MongoDB为许多编程语言供给的驱动程序。

你能够依照本教程中描绘的准则在MongoDB shell中履行本系列其他文章中的指令。咱们鼓励你在MongoDB官方文档中了解更多关于MongoDB Shell的信息。