文章目录
1、简介
MongoDB 是文档型数据库,内部引擎是js实现的。
MongoDB 官方英文文档:https://docs.mongodb.com/manual/
MongoDB 各平台下载地址:https://www.mongodb.com/download-center#community
和传统数据库比:
传统数据库:结构化数据,每行每列都相同
MongoDB文档数据库:采用json格式存储,比较灵活,每条数据可以有不同的数据。
mongodb可以轻松应对三高场景(高并发、高存储、高可用)
2、下载安装
mongodb是很占磁盘空间的,可能会占用3-4G
2.1、windows下安装
下载地址:https://www.mongodb.com/try/download/community
安装就是无脑下一步
需要注意的是默认勾选的下载图形化界面,把这个勾去掉,不然很慢
打开服务端
插入一条数据,再检索试试
2.2、linux下安装
这里以centos为例
安装相关依赖:
sudo yum install libcurl openssl
下载解压
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz
tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz
将解压包拷贝到指定目录
mv mongodb-src-r4.2.8 /usr/local/mongodb4
MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:
export PATH=<mongodb-install-directory>/bin:$PATH
<mongodb-install-directory> 为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb4 。
export PATH=/usr/local/mongodb4/bin:$PATH
创建数据库目录、日志目录
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
sudo chown `whoami` /var/lib/mongo # 设置权限
sudo chown `whoami` /var/log/mongodb # 设置权限
启动 Mongodb 服务
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
打开 /var/log/mongodb/mongod.log 文件看到以下信息,说明启动成功。
# tail -10f /var/log/mongodb/mongod.log
2020-07-09T12:20:17.391+0800 I NETWORK [listener] Listening on /tmp/mongodb-27017.sock
2020-07-09T12:20:17.392+0800 I NETWORK [listener] Listening on 127.0.0.1
MongoDB 后台管理 Shell
$ cd /usr/local/mongodb4/bin
$ ./mongo
MongoDB shell version v4.2.8
connecting to: mongodb://127.0.0.1:27017/?co
...
可以用js语法进行操作:插入一条数据并检索试试
> db.runoob.insert({x:10})
WriteResult({ "nInserted" : 1 })
> db.runoob.find()
{ "_id" : ObjectId("5f069bdb4e02f8baf90f1184"), "x" : 10 }
>
如果要停止 mongodb 可以使用以下命令:
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown
mongodb是很占磁盘空间的,可能会占用3-4G,可以使用smallfiles选项来启动(400m左右)
3、程序功能解释
4、概念
一个mongodb中可以有多个库,一个库中有多个表。
表里面也有记录行、字段、索引、主键。
5、指令
mongodb的指令大小写是敏感的
5.1、数据库相关指令
查看有哪些库
show dbs
使用一个库test
use test
在mongodb中数据库的创建是隐式的
我们在use 一个库的时候,如果没有这个库,就会默认创建
(前提是必须在这个新库里面创建至少一个表)
use test1
db.createCollection("user");
删除当前使用的库
db.dropDatabase();
5.2、表相关指令
使用表相关的指令前,需要先use一个库
查看有哪些表(下面两个指令都可以)
show tables
show collections
创建一个表
db.createCollection("user");
插入一条数据(如下user是表名)
插入的数据,会默认给添加一个_id字段,作为主键
db.user.insert({name:zhangsan,age:25});
表的创建也是可以隐式创建的
比如下面我直接向不存在的表user1里面插入数据,user1就默认创建了
db.user1.insert({name:zhangsan,age:25});
可以插入时手动指定_id
db.user.insert({_id:1,name:lisi,age:40});
查找user表下的数据
db.user.find();
mongodb表里的内容就是json,满足json格式的都可以插进去
比如插一个数组
db.user.insert({_id:1,name:lisi,age:40,hobby:['1','2'],intro:{'title':'aa',content:'bb'}});
删除表user
db.user.drop();
5.3、数据相关指令
增
db.aaa.insert({_id:1,name:lisi,age:40});
增之前必须先use一个库,表名可以不用创建(会隐身创建)
增多个
db.aaa.insert([{_id:1,name:lisi},{_id:2,name:lisi1},{_id:3,name:lisi2}]);
删 (会删除所有匹配的)
db.aaa.remove({name:lisi})
删 (限定只删一条数据)
db.aaa.remove({name:lisi}, true)
删空整个表
db.aaa.remove()
改 (如下改会改整体,而不仅仅是改name)
db.aaa.update({name:'lisi'},{name:'lihua'})
改 (仅改指定字段: $set:{ })
db.aaa.update({name:'lisi'},{$set:{name:'lihua'}})
复杂改 (默认只改一行)
复杂改 (改多行,把multi设为true)
如果没有匹配值,插入一个新的行(设upsert:true)
如果没有匹配值,插入一个新的行,并添加新的字段值($setOnIsert:{ })
$setOnIsert 需要版本在2.4以上才支持
查所有列
db.stu.find()
查 (仅查前3条)
db.stu.find().limit(3)
查 (查所有文档的gender属性)
查 (查所有文档的gender属性,且不查询_id)
查 (查所有文档的gender属性等于male,只看name,不看_id)
5.4、批量插入try catch
在批量插入的时候,有可能出现中途失败的,就全部插入失败了,使用try catch可以避免这个问题
5.5、统计数量
统计记录的条数:
db.user.count()
统计记录的条数(条件是userid为100的):
db.user.count({userid:"100"})
5.6、排序
5.7、使用正则匹配查询
5.8、比较查询
5.9、常用指令总结
6、索引
6.1、索引的创建
查看索引
db.aaa.getIndexes()
增加索引
db.aaa.createIndex(userid:1)
1表示升序
复合索引
删除索引
根据名词删索引
删除所有索引
_id 是不会被删掉的
6.2、执行计划 explain( )
可以使用Compass工具查看