MongoDB 基础系列十:mongo Shell 基础介绍

前言

此篇博文是 Mongdb 基础系列之一;对 mongo Shell 的基础内容进行描述;

本文为作者的原创作品,转载需注明出处;

简介

mongo shell 是一个与 MongoDB 进行交互的 javascript 接口程序;mongo shell 是 MongoDB distributions 中的一个模块,所以一旦你已经成功安装并启动了 MongoDB,那么就可以直接使用 mongo shell 来连接你的 MongoDB 实例了;

启动

如何连接本地的 MongoDB instance,

  1. 进入你的 <mongodb installation dir>

    1
    $ cd <mongodb installation dir>
  2. 连接

    1
    $ ./bin/mongo

    If you have added the <mongodb installation dir>/bin to the PATH environment variable, you can just type mongo instead of ./bin/mongo.

启动选项

When you run mongo without any arguments, the mongo shell will attempt to connect to the MongoDB instance running on the localhost interface on port 27017. To specify a different host or port number, as well as other options, see examples of starting up mongo and mongo reference which provides details on the available options.

注意,如果直接在命令行中使用 mongo 而不跟任何的参数,那么 mongo shell 将会试图连接默认配置既是 localhost:27017

本地测试

如前文所介绍的那样启动 MongoDB

1
2
3
4
5
6
$ mongod --dbpath ~/data/mongodb
2017-07-23T15:01:53.734+0800 I CONTROL [initandlisten] MongoDB starting : pid=51183 port=27017 dbpath=/Users/mac/data/mongodb 64-bit host=macdeMacBook-Pro.local
2017-07-23T15:01:53.734+0800 I CONTROL [initandlisten] db version v3.4.6
2017-07-23T15:01:53.734+0800 I CONTROL [initandlisten] git version: c55eb86ef46ee7aede3b1e2a5d184a7df4bfb5b5
2017-07-23T15:01:53.734+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2l 25 May 2017
......

然后,使用默认的方式启动 mongo shell,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-07-23T15:01:54.476+0800 I CONTROL [initandlisten]
2017-07-23T15:01:54.476+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-07-23T15:01:54.476+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-07-23T15:01:54.476+0800 I CONTROL [initandlisten]
>

这样,我们就可以在命令行中输入我们的指令了;

.mongorc.js File

每次 mongo shell 启动的时候都会从 HOME 的根路径中查找一个默认的名为 .mongorc.js javascript 文件,如果找到了该文件,mongo shell 会首先解释执行其中的内容,然后再进入命令提示行;.mongorc.js 文件中可以定义参数,自定义输出格式等等;除了通过 .mongorc.js 文件来初始化 mongo shell 的启动环境参数,还可以通过使用 –eval 或者显示的为 mongo shell 指定一个启动参数文件 的方式来进行;

如果你不想通过配置文件去预加载任何的参数配置,使用 –norc 选项;

参考用例自定义 Prompt 看看它的实用场景;

使用

db

继续本地测试中的步骤,在命令行中输入 db 命令,

1
2
> db
test

返回当前所使用的 database;默认情况下,使用的是 database test

show dbs

1
2
3
> show dbs
admin 0.000GB
local 0.000GB

显示当前所有可用的 databases;

use <database>

如果需要切换当前的 database,使用命令

1
> use <database>

可以切换到一个不存在的 database 上,当你第一次在该 database 上存储数据的时候,比如创建一个 collection,过程中MongoDB 会自动的创建该 database;参考下面这个例子,

1
2
> use myNewDatabase
> db.myCollection.insertOne( { x: 1 } );

切换到一个不存在的 database myNewDatabase 中,然后通过 insertOne() 方法为 myCollection 插入一个元素;上面这个例子有意思的是,过程中不仅仅会自动创建 database,同时会创建 collection;还需要注意如下两点,

  • db
    表示当前的 database myNewDatabase
  • myCollection
    该 database 所对应的 collection;

db.<collection>

另外,如果命令 db 不能接有敏感字符的 collection name,比如以数字开头,包含了空格等等;可以使用如下的方式来访问,

1
2
>db["3test"].find()
>db.getCollection("3test").find()

不过我的疑问是,为什么 MongoDB 不对这种情况进行禁用?

格式化输出

db.collection.find() 方法将会返回结果的一个 cursor;在 mongo shell 中,如果该 cursor 没有赋值给一个经过 var 声明的变量,那么 mongo shell 将会自动的打印出前 20 个结果,然后根据提示输出下一批结果集;

使用 .pretty() 操作来将结果进行格式化输出,

1
> db.myCollection.find().pretty()

通过 mongo shell,可以显示进行格式化调用的方法有,

  • print() to print without formatting
  • print(tojson(<obj>)) to print with JSON formatting and equivalent to printjson()
  • printjson() to print with JSON formatting and equivalent to print(tojson(<obj>))

For more information and examples on cursor handling in the mongo shell, see Iterate a Cursor in the mongo Shell. See also Cursor Help for list of cursor help in the mongo shell.

Multi-line Operations in the mongo Shell

在 mongo shell 中可以输入 javascript 代码,如果代码换行没有完成,将会以 … 前缀表示;

1
2
3
4
> if ( x > 0 ) {
... count++;
... print (x);
... }

Tab 以及其他的快捷键

The mongo shell supports keyboard shortcuts. For example,

  • Use the up/down arrow keys to scroll through command history. See .dbshell documentation for more information on the .dbshell file.
  • Use <Tab> to autocomplete or to list the completion possibilities, as in the following example which uses to complete the method name starting with the letter ‘c’:
    1
    db.myCollection.c<Tab>

Because there are many collection methods starting with the letter ‘c’, the <Tab> will list the various methods that start with ‘c’.

For a full list of the shortcuts, see Shell Keyboard Shortcuts

退出

在命令行中使用命令 quit() 或者使用快捷键 CTRL + D 退出;