MongoDB基本命令归纳


普及MongoDB一些知识

默认监听端口号 27017/28017

进程名 mongod mongo

数据传输协议 TCP

数据库目录 /data/db

服务名 mongodb

一、软件安装

1) 下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装)

liuys@ubuntu:~$ sudo wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
--2018-01-31 18:31:39--  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
Resolving fastdl.mongodb.org (fastdl.mongodb.org)... 54.192.212.129, 54.192.212.164, 54.192.212.115, ...
Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|54.192.212.129|:443... failed: Connection refused.
Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|54.192.212.164|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 40282490 (38M) [application/x-gzip]
Saving to: mongodb-linux-x86_64-3.0.6.tgz

mongodb-linux-x86_64-3.0.6.tgz  100%[====================================================>]  38.42M  45.8KB/s    in 9m 52s  

2018-01-31 18:41:54 (66.5 KB/s) - mongodb-linux-x86_64-3.0.6.tgz saved [40282490/40282490]

2) 解压软件包

liuys@ubuntu:~$ sudo tar -xf /opt/mongodb-linux-x86_64-3.0.6.tgz

3) 将解压包拷贝到指定目录

  liuys@ubuntu:~$ sudo mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
** MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:
  liuys@ubuntu:~$ sudo export PATH=/usr/local/mongodb/bin:$PATH

二、创建数据库目录

1) MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。

** 以下实例中我们将data目录创建于根目录下(/)。

** 注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。

liuys@ubuntu:~$ mkdir -p /data/db
liuys@ubuntu:~$ sudo cd /usr/local/mongodb/bin/
liuys@ubuntu:~$ sudo ./mongod
2018-02-01T10:45:49.238+0800 I STORAGE  [initandlisten] 
2018-02-01T10:45:49.238+0800 I STORAGE  [initandlisten] ** WARNING: Readahead for /data/db is set to 4096KB
2018-02-01T10:45:49.238+0800 I STORAGE  [initandlisten] **          We suggest setting it to 256KB (512 sectors) or less
2018-02-01T10:45:49.238+0800 I STORAGE  [initandlisten] **          http://dochub.mongodb.org/core/readahead
2018-02-01T10:45:49.238+0800 I JOURNAL  [initandlisten] journal dir=/data/db/journal
2018-02-01T10:45:49.238+0800 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed
2018-02-01T10:45:49.277+0800 I JOURNAL  [durability] Durability thread started
。。。。。。。

三、命令行中运行 MongoDB 服务

1) 你可以再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务

liuys@ubuntu:~$ sudo ./mongo
MongoDB shell version: 3.0.6
connecting to: test
Welcome to the MongoDB shell.
。。。。。。。

2) MongoDB后台管理 Shell

** 如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。

** MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。

** 当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):

liuys@ubuntu:~$ sudo cd /usr/local/mongodb/bin 
liuys@ubuntu:~$ sudo ./mongo MongoDB shell version: 3.0.6 
connecting to: test Welcome to the MongoDB shell. ……

3) 由于它是一个JavaScript shell,您可以运行一些简单的算术运算:

> 2+2
4
> 3+6
9

4) 现在让我们插入一些简单的数据,并对插入的数据进行检索:

> db.runoob.insert({x:10})
WriteResult({ "nInserted" : 1 })
> db.runoob.find()
{ "_id" : ObjectId("5a7280e615a8f7a4cd7bf532"), "x" : 10 }
第一个命令将数字 10 插入到 runoob 集合的 x 字段中。

四、MongoDb web 用户界面

1) MongoDB 提供了简单的 HTTP 用户界面。

** 如果你想启用该功能,需要在启动的时候指定参数 --rest

liuys@ubuntu:~$ sudo ./mongod --dbpath=/data/db --rest
2018-02-01T10:54:06.272+0800 I CONTROL  ** WARNING: --rest is specified without --httpinterface,
2018-02-01T10:54:06.272+0800 I CONTROL  **          enabling http interface
2018-02-01T10:54:06.336+0800 I STORAGE  [initandlisten] 

*** MongoDB 的 Web 界面访问端口比服务的端口多1000。

2) 如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017

所有的增加的命令

五、mongoDB的连接

1) 使用默认端口来连接 MongoDB 的服务。

> mongodb://localhost

*** 通过 shell 连接 MongoDB 服务:

liuys@ubuntu:~$ sudo ./mongo
MongoDB shell version: 3.0.6
connecting to: test
... 

*** 这时候你返回查看运行 ./mongod 命令的窗口,可以看到是从哪里连接到MongoDB的服务器,您可以看到如下信息:

……省略信息……
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] options: { storage: { dbPath: "/data/db" } }
2015-09-25T17:22:27.350+0800 I NETWORK  [initandlisten] waiting for connections on port 27017
2015-09-25T17:22:36.012+0800 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open)  # 
该行表明一个来自本机的连接
……省略信息……

2) MongoDB 连接命令格式

** 使用用户名和密码连接到 MongoDB 服务器,你必须使用 'username:password@hostname/dbname' 格式,'username'为用户名,'password' 为密码。

** 使用用户名和密码连接登陆到默认数据库:

liuys@ubuntu:~$ sudo ./mongo
MongoDB shell version: 3.0.6
connecting to: test

** 使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上。输出结果如下所示:

> mongodb://admin:123456@localhost/
... 

** 使用用户名和密码连接登陆到指定数据库,格式如下:

> mongodb://admin:123456@localhost/test

** 更多连接实例 ** 连接本地数据库服务器,端口是默认的。

> mongodb://localhost

** 使用用户名fred,密码foobar登录localhost的admin数据库。

> mongodb://fred:foobar@localhost

** 使用用户名fred,密码foobar登录localhost的baz数据库。

> mongodb://fred:foobar@localhost/baz

** 连接 replica pair, 服务器1为example1.com服务器2为example2。

> mongodb://example1.com:27017,example2.com:27017

** 连接 replica set 三台服务器 (端口 27017, 27018, 和27019):

> mongodb://localhost,localhost:27018,localhost:27019

** 连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。

> mongodb://host1,host2,host3/?slaveOk=true

** 直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器。

> mongodb://host1,host2,host3/?connect=direct;slaveOk=true

** 当你的连接服务器有优先级,还需要列出所有服务器,你可以使用上述连接方式。 安全模式连接到localhost:

> mongodb://localhost/?safe=true

** 以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒。

> mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000

1).创建数据库、表

创建一个库/切换库,库存在则切换,不存在则创建并切换
> use runoob
switched to db runoob
> db
runoob
> 
查看所有库
> show dbs
local  0.078GB
test   0.078GB
> 
可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,我们需要向 runoob 数据库插入一些数据。
> db.runoob.insert({"name":"菜鸟教程"})
WriteResult({ "nInserted" : 1 })
> show dbs
local   0.078GB
runoob  0.078GB
test    0.078GB
> 
创建一个表
> db.runoob.insert({"name":"菜鸟教程"})
WriteResult({ "nInserted" : 1 })

创建一个主键的可自动增长非负的字段的表

创建一个时间等特定字段的表

创建含datetime 与 timestamp 的当未给TIMESTAMP字段赋值时,自动以当前系统时间赋值,而DATETIME字段默认赋值为 NULL的表

创建含enum(值1,值2,值N) 只能在列举的范围内选择一个值set(值1,值2,值N) 能在列举的范围内选择一个或多个值,以及浮点数的表

添加一个auto_increment初始值的表

#指定第一条的编号从多少开始 2).添加表数据

插入文档记录的注意事项 MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)

以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中:

>db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

** col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档

添加单条数据

同时添加多条数据

同时向特定字段添加多条数据

建表时创建主键

创建主键 primary key 一个表里只能有一个主键,字段值不允许重复且不允许赋null值;若多个字段做主键叫复合主键,复合主键必须一起创建(字段的值不允许同时相同)。和auto_increment连用,让字段的值自动增长 字段的值自加1后给当前字段赋值 通常把表中能够唯一定位一条记录的字段设置为主键字段。

在已有表里创建主键

创建外键 foreign key

1 表的存储引擎必须是innodb 2 字段的类型要一致 3 被参考的字段必须是key 的一种(primary key) 创建父表并插入数据

创建子表

使用外键时的注意事项:

当一个表被参考时 ,表和被参考的字段都不允许删除 一个表里可以有多个外键字段。 一个父表可以被多个子表参考 所有的删除命令

删除字段名

删除主键

删除表结构

删除外键:

2).删除表记录(以行为删除单位)

删除与条件匹配的记录 delete from 库名.表名 where 条件;

删除所有记录。

所有的修改命令

1).改名字

修改字段名

修改表名

3).修改表结构

添加至字段之首

添加至指定字段后面

一次添加多个字段

3).修改表数据 ** update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

** query : update的查询条件,类似sql update查询内where后面的。

** update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

** upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

** multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

** writeConcern :可选,抛出异常的级别。 集合 col 中插入如下数据:

>db.col.insert({
    title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

通过 update() 方法来更新标题(title):

>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })    

#输出信息

> db.col.find().pretty()
{
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
>

** 可以看到标题(title)由原来的 "MongoDB 教程" 更新为了 "MongoDB"。

** 以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

save() 方法

  1. save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

参数说明: ** document : 文档数据。 ** writeConcern :可选,抛出异常的级别。 实例中替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:

>db.col.save({
    "_id" : ObjectId("56064f89ade2f21f36b03136"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "Runoob",
    "url" : "http://www.runoob.com",
    "tags" : [
            "mongodb",
            "NoSQL"
    ],
    "likes" : 110
})

** 替换成功后,我们可以通过 find() 命令来查看替换后的数据

>db.col.find().pretty()
{
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Runoob",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "NoSQL"
        ],
        "likes" : 110
}
> 

更新第一条记录:

db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

全部更新:

db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 

只添加第一条:

db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 

全部添加加进去:

db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 

全部更新:

db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

在3.2版本开始,MongoDB提供以下更新集合文档的方法:

** db.collection.updateOne() 向指定集合更新单个文档 ** db.collection.updateMany() 向指定集合更新多个文档

1) 首先我们在test集合里插入测试数据

> use test
db.test_collection.insert( [
{"name":"abc","age":"25","status":"zxc"},
{"name":"dec","age":"19","status":"qwe"},
{"name":"asd","age":"30","status":"nmn"},
] )

*** 更新单个文档

> db.test_collection.updateOne({"name":"abc"},{$set:{"age":"28"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.test_collection.find()
{ "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "zxc" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "qwe" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "nmn" }
>

*** 更新多个文档

> db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
> db.test_collection.find()
{ "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "xyz" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "xyz" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "xyz" }
>

4).修改字段类型

若修改的类型与已经存储的数据有冲突,不允许修改 修改字段约束条件

所有的查看的命令

1).查看已插入文档过程

> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
> 

** 将数据定义为一个变量

> document=({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});
** 执行插入操作:
> db.col.insert(document)
WriteResult({ "nInserted" : 1 })
> 
** 执行后显示结果如下:
{
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

2).查看表结构

3).查看建库的过程

4).查看表中复合条件记录指定字段的值

select 字段名列表 from 库名.表名 where 条件表达式;

5).数值比较 (字段必须是数值类型)字段名 符号 值

= != > >= < <=

6).字符比较 (字段必须是数值类型)字段名 符号 "值"

= !=

7).范围内匹配

between...and.... 在...之间 in (值列表) 在...里... not in (值列表) 不在...里...

8).匹配空 is null 匹配非空 is not null

9).逻辑比较

(2个或2个以上查询条件时使用逻辑比较) 逻辑与 and 多个条件必须同时成立 逻辑或 or 多个条件时某一个条件成立就可以 逻辑非 ! 取反

  • ( ) 提高优先级

10).模糊查询

字段名 like '模糊查询表达式'; 模糊查询表达式

% 表示零个或多个字符 _ 表示任意一个字符

11). 正则匹配

字段名 regexp '正则表达式'; ^ $ . * [0-9] 0123456789

12).数学计算 + - * / %

13).聚集函数

count(字段名) 统计字段值的个数 max(字段名) 获取字段的最大值 min(字段名) 获取字段的最小值 avg(字段名) 获取字段的平均值 sum(字段名) 统计字段的和

sql查询命令 group by 字段名;

14).查询结果排序

sql查询 order by 字段名 排序方式; asc 默认 升序 desc 降序

15).在查询结果里过滤数据

sql查询 having 条件表达式;

16). 限制显示查询记录的条目

默认会把复合查询条件的记录全部显示出来 sql查询 limit 数字1,数字2; 数字1 表示从查询结果的第几条记录开始显示 数字2 表示显示几条记录

17).复制表(快速创建一个新表 把表备份一下)

源表的字段的key属性不会被复制给新表。 create table 新表名 sql查询; 复制所有内容

create table 新表名 select * from 表名;

18).怎么显示登录的用户名和客户端地址

19). 登录用查看自己的访问权限?

复制部分内容

create table 新表名 select 字段名列表 from 表名 where 条件;

只复制表结构

create table 新表名 select * from 表名 where 不成立的条件;

18).嵌套查询

把内层查询结果作为外层查询的查询条件 select 字段名列表 from 表名 where 条件 (select 字段名列表 from 表名) ;

19).多表查询

select 字段名列表 from 表名1 ,表名2,表名n; select 字段名列表 from 表名1 ,表名2,表名n where 条件表达式;

连接查询 左连接left jion ... on 条件 查询时以左边的表为主显示查询结果 右连接right jion ... on 条件 查询时以左边的表为主显示查询结果 mysql> create table t43 select name,uid,shell from userdb.user limit 3;

数据的导入与导出

数据导入 : 把系统文件的内容存储到数据库的表里

mysql> LOAD DATA INFILE '文件名' INTO TABLE 表名 FIELDS TERMINATED BY '分隔符' LINES TERMINATED BY '\n'; 把系统用户信息存储到 userdb库下的user表里/etc/passwd 用户名:密码占位符:uid:gid:描述信息:家目录:shell

  • 查看表结构

  • 导入数据

数据导入注意事项

字段分隔符要与文件内的一致 指定导入文件的绝对路径 导入数据的表字段类型要与文件字段匹配 数据导出: 把数据库表里记录存储到系统文件里

语法格式:

SQL查询命令 INTO OUTFILE "文件名"; SQL查询命令 INTO OUTFILE "目录名/文件名" fields terminated by "符号" lines terminated by "符号";

数据导出注意事项

导出的内容由SQL查询语句决定 若不指定路径,默认会放在执行导出命令时所在库对应的数据库目录下。 应确保mysql用户对目标文件夹有写权限。 存储导出数据的文件具有唯一性

猜你喜欢

转载自blog.csdn.net/baidu_38432732/article/details/80637961