MongoDB学习

一.NoSQL的介绍
1.1什么是NoSQL?
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
1.2 NoSQL的优点/缺点
优点:

  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系
    缺点:
  • 没有标准化
  • 有限的查询功能(到目前为止)
  • 最终一致是不直观的程序
    1.3NoSQL 数据库分类
    (1)列存储
    Hbase
    Cassandra
    Hypertable
    顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
    (2)文档存储
    MongoDB
    CouchDB
    文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。
    (3)key-value存储
    Tokyo Cabinet / Tyrant
    Berkeley DB
    MemcacheDB
    Redis
    可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)
    (4)图存储
    Neo4J
    FlockDB
    图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。
    1.4谁在使用
    现在已经有很多公司使用了 NoSQL:
    Google
    Facebook
    Mozilla
    Adobe
    Foursquare
    LinkedIn
    Digg
    McGraw-Hill Education
    Vermont Public Radio
    二.mongodb的介绍
    2.1什么是Mongodb?
    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
    在高负载的情况下,添加更多的节点,可以保证服务器性能。
    MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
    在这里插入图片描述
    2.2 mongodb核心的概念
    在这里插入图片描述
    2.3 mongodb的注意事项
    1)文档中的键/值对是有序的。
    2)文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
    3)MongoDB区分类型和大小写。
    4)MongoDB的文档不能有重复的键。
    5)文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
    三.mongodb的安装
    3.1windows下安装Mongodb
    第一步:获取软件包
    在这里插入图片描述
    第二步:安装mongodb
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    第三步:手动安装mongodb的启动服务
    新建一个存储数据库和日志的目录php7mongodb
    在这里插入图片描述
    在这里插入图片描述
    找到mongodb的安装路径
    在这里插入图片描述
    以管理员的方式进入cmd
    在这里插入图片描述

有时候会加上 --journal,或者服务启动失败换一个安装包,我的是系统版本的原因

第四步:安装成功之后查看一下启动服务(开启服务)
在这里插入图片描述
第五步:如何使用mongodb
在这里插入图片描述

第六步:设置环境变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
请注意,你必须有管理员权限才能运行cmd下面的命令。执行以下命令将MongoDB服务器作为Windows服务运行:
mongod.exe --dbpath=“E:\php7mongodb\db” --logpath =“E:\php7mongodb\log\log.txt” --install
下表为mongodb启动的参数说明:
参数 描述
–bind_ip 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
–logpath 定MongoDB日志文件,注意是指定文件不是目录
–logappend 使用追加的方式写日志
–dbpath 指定数据库路径
–port 指定服务端口号,默认端口27017
–serviceName 指定服务名称
–serviceDisplayName 指定服务名称,有多个mongodb服务时执行。
–install 指定作为一个Windows服务安装
3.2 linux中mongodb的安装
第一步:获取安装包
在这里插入图片描述
第二步:上传mongdb安装包并解压缩
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三步:将解压缩包移动到/usr/local/mongodb目录下
在这里插入图片描述
第四步:启动mongod服务器端
在这里插入图片描述
在这里插入图片描述
第五步:创建数据库的存储目录(data)和日志的存储目录(log)
在这里插入图片描述
第六步:创建一个加载的文件mongod.ini
vim mongod.ini
dbpath:数据库路径
logpath:日志路径
在这里插入图片描述
在这里插入图片描述
第七步:开启mongodb的服务器端
在这里插入图片描述
第八步:登录mongod的客户端
在这里插入图片描述
四.数据库的操作
4.1快速的体验
具体实例1:查看所有的数据库和新建一个数据库和查看当前的数据库
在这里插入图片描述
具体实例2:创建表添加数据和查看数据库
在这里插入图片描述
具体实例3:查看数据库和表
在这里插入图片描述
4.2 MongoDB后台管理 Shell
进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo.exe文件,MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
在这里插入图片描述
4.3 数据库的增删改查
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
(1)创建数据库
use databasename
如果库没有则创建,有则切换到使用的数据库。
如果不在库中增加集合或文档,则库还会消失。
如果创建了集合文档,库就会被自动创建。
(2)删除数据库
use database();
db.dropDatabase():注意大小写。
具体实例:删除数据库
在这里插入图片描述
(3)查看数据库
show dbs:查看所有的数据库。
db:查看当前的数据库。
具体实例:
在这里插入图片描述
(4)查看数据库的状态
db.stats()
具体实例:
在这里插入图片描述
五.数据库表(集合)的操作
5.1 创建表
语法说明:
db.createCollection(‘collectionname’)
具体实例:创建一个user表
在这里插入图片描述
5.2 修改表
语法说明:
db.oldCollection.renameCollection(‘newCollection’)
具体实例:给表改名称
在这里插入图片描述
5.3 查看表
语法说明:
show collections;
show tables;
具体实例:
在这里插入图片描述
5.4 删除表
语法说明:
db.collectionname.drop()
具体实例:
在这里插入图片描述
六.文档对象的操作(CURD:增删改查)
所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
6.1添加数据
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,
语法如下:
db.COLLECTION_NAME.insert(document)
具体实例:添加数据
在这里插入图片描述
6.2查看数据
db.COLLECTION_NAME.find()
find() 方法以非结构化的方式来显示所有文档。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.col.find().pretty()
具体实例1:查看数据的时候,隐藏主键id
在这里插入图片描述
具体实例2:以易读的格式显示数据
在这里插入图片描述
具体实例3:查看某一条数据
在这里插入图片描述
6.3修改数据
语法如下:
db.collection.update(
query,
update,
{
upsert: ,
multi: ,
})
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如 s e t , set, set,inc…)等,
upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
具体实例1:简单修改
在这里插入图片描述
具体实例2:如果你修改的条件不存在,那么后面修改的内容变成添加
在这里插入图片描述
具体实例3:怎样修改多条记录
db.user.update({name:‘张昭’},{$set:{name:‘刘表’}},{multi:true})
multi:true,修改多条记录
在这里插入图片描述
6.4删除数据
语法说明:
remove({条件})
删除一条重复数据:justOne:ture
删除所有:remove({})
具体实例1:简单删除
在这里插入图片描述
具体实例2:多条删除
在这里插入图片描述
具体实例3:删除一条重复的数据{justOne:true}
在这里插入图片描述
七.数据库索引
索引:提高网站的查询效率,给字段加索引
索引的分类:
普通索引
唯一索引
7.1 添加索引
db.collectionname.ensureIndex({key:1});
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
具体实例1:给一个字段创建一个普通索引
在这里插入图片描述
具体实例2:创建一个唯一索引{unique:true}

在这里插入图片描述
在这里插入图片描述
具体的应用:不能添加重复的数据
在这里插入图片描述
7.2 查看索引
db.collectionname.getIndexes()
具体实例1:查看索引
在这里插入图片描述
7.3 删除索引
语法说明:
db.collectionname.dropIndex(‘索引的名称’);
具体实例:
在这里插入图片描述
八.文档对象的条件运算符
8.1 关系运算符
1) g t : 大 于 2 ) gt:大于 2) gt:2)lt:小于
3) g t e : 大 于 等 于 4 ) gte:大于等于 4) gte:4)lte:小于等于
5) n e : 不 等 于 6 ) ne:不等于 6) ne:6)eq:等于
具体实例1:
db.user.find({age:{ g t e : 25 , gte:25, gte:25,lte:30}})
在这里插入图片描述
具体实例2:年龄等于32
在这里插入图片描述

7)KaTeX parse error: Expected '}', got 'EOF' at end of input: …n:在某个集合中 具体实例:{in: [25, 26,32]}
在这里插入图片描述
8)KaTeX parse error: Expected '}', got 'EOF' at end of input: …:不在某个集合中 具体实例:{nin: [25, 26,32]}
在这里插入图片描述
9)KaTeX parse error: Expected '}', got 'EOF' at end of input: …ists:是否存在某个属性 {exists:false},某个属性是否存在。
具体实例:

在这里插入图片描述
8.2 正则运算符
{属性: 正则表达式对象}
/正则表达式/
具体实例:
db.user.find({name:/^p/})
在这里插入图片描述

8.3 逻辑运算符
KaTeX parse error: Expected '}', got 'EOF' at end of input: and运算符 语法:{and: [条件1, 条件2]}。
具体实例:
在这里插入图片描述
KaTeX parse error: Expected '}', got 'EOF' at end of input: or运算符 语法:{or: [条件1, 条件2]}。
具体实例:db.user.find({$or:[{name:‘郭嘉’},{age:25}]})
在这里插入图片描述
KaTeX parse error: Expected '}', got 'EOF' at end of input: …er.find({name:{not:{KaTeX parse error: Expected 'EOF', got '}' at position 8: eq:'贾诩'}̲}}); ![在这里插入图片描…where)
数组
数组索引对应匹配, property.index
‘属性.index’, 表示该索引值的元素,
具体实例:
在这里插入图片描述
对象的:KaTeX parse error: Expected '}', got 'EOF' at end of input: … db.user.find({where:function(){
if(this.age>=26){
return true;
}
else{
return false;
}
}},{’_id’:false});
具体实例:
在这里插入图片描述
8.6 查询的条件(查询全部,去掉id号)
查询全部数据,去掉id号。
db.user.find({},{_id:false})
具体实例:
在这里插入图片描述
8.7 其他查询的条件
limit(number):显示几条数据
具体实例:
在这里插入图片描述
skip(number):跳过几条数据
具体实例1:
在这里插入图片描述
具体实例2:
在这里插入图片描述
sort():排序
具体实例:sort({age:1}) 1:升序,-1:降序
在这里插入图片描述
count():记录数
具体实例:
在这里插入图片描述
distinct():消除重复 的数据
具体实例:
在这里插入图片描述
在这里插入图片描述
九.文件的修改操作
(1)$set:修改字段的值
具体实例:

在这里插入图片描述
(2) u n s e t : 删 除 某 个 字 段 具 体 实 例 : ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20190314124338761. p n g ) ( 3 ) unset:删除某个字段 具体实例: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190314124338761.png) (3) unset:![](https://imgblog.csdnimg.cn/20190314124338761.png)(3)inc:递增递减数据
具体实例:

在这里插入图片描述
(4) p u s h : 向 数 组 中 添 加 一 条 数 据 具 体 实 例 : ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20190314124438362. p n g ) ( 5 ) push:向数组中添加一条数据 具体实例: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190314124438362.png) (5) push:![](https://imgblog.csdnimg.cn/20190314124438362.png)(5)pushAll:向数组添加多条数据
具体实例:

在这里插入图片描述
(6)$pull:从数组中拉出数据
具体实例:

在这里插入图片描述
(7)$pullAll:从数组中拉出多条数据
具体实例:

在这里插入图片描述
(8)$pop:删除数据
将数组中最后一个元素弹出栈!
具体实例:

在这里插入图片描述
(9)$addToSet:加入到数组
具体实例:

在这里插入图片描述
十.PHP操作mongodb
10.1 window上安装 MongoDB PHP扩展
第一步:获取扩展安装包
在这里插入图片描述
第二步:给php添加扩展
在这里插入图片描述
在这里插入图片描述
第三步:在php.ini中添加扩展
在这里插入图片描述
第四步:重启服务器
在这里插入图片描述
第五步:查看扩展
在这里插入图片描述
10.2 linux上安装 MongoDB PHP扩展
第一步:获取扩展安装包
在这里插入图片描述
上传文件
在这里插入图片描述
第二步:解压缩安装,使用Phpize安装扩展
在这里插入图片描述
第三步:编译安装
./configure && make && make install
在这里插入图片描述

在php.ini中添加扩展
在这里插入图片描述
第四步:关闭防火墙重启apache服务器
在这里插入图片描述
第五步:查看扩展
在这里插入图片描述
10.3 php 连接mongodb
port:27017
在这里插入图片描述
在这里插入图片描述
10.4 php 添加mongodb数据
在这里插入图片描述
在这里插入图片描述
10.5 php 查看mongodb数据
在这里插入图片描述
在这里插入图片描述
十一.MongoDB ObjectId
ObjectId 是一个12字节 BSON 类型数据,有以下格式:
前4个字节表示时间戳
接下来的3个字节是机器标识码
紧接的2两个字节由进程id组成(PID)
最后3三个字节是随机数。
MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象
隐藏id号:
db.mongophp.find({},{’_id’:false});
分开写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值