Nosql:(非关系型),MongoDB就是一种非关系型的数据库。mongoDB也是nosql类的产品。
Member,redis等等都属于nosql类的产品。
Mongodb是面向文档的数据库。一条记录叫做:文档。把多个文档放到一起叫做:集合【mysql中的表】
MongoDB和MySql最大的区别?
- MongoDB是无模式的(无需建表)
- Mongodb使用JavaScript语言操作。mysql使用的是SQL。
- MongoDB以json形式保存一条记录,读写方面性能非常快。相对数据来说:事务、视图、存储过程都没有。
- MongoDB扩展很容易(用MONGODB实现分表、读写分离、分布式存储 非常容易,配置一下即可),MySql的扩展也可以做到,但是性能和维护成本非常高。
所以,MONGDB适合存储:数据结构简单、数据量非常大、高并发读写的操作。
MONGODB在保存关系比较复杂的数据时不太容易,不支持关系和连表操作,相对数据库中的一对多和多对多的关系不如mysql方便。
非常适合:数据量非常大、数据结构单一的数据存储(比如,投票、日志等等)。
实际操作
安装mongodb
- 先创建一个目录(用来存放mongodb中的数据)和一个文件(mongdb的日志文件)
- 执行mongodb中的mongod.exe命令进行安装:
- 打开服务窗口查看并启动
- 运行mongodb.exe客户端程序连接到服务器上进行操作
-
- 扩展:mongodb默认没有开启权限验证机制,如果要开启需要先创建好管理员账号才行。
- 在客户端就可以执行JavaScript代码了
-
客户端的使用
db变量的使用-》当前正在使用的数据库
切换数据库:use 库名 //数据库可以是不存在的,无模式。不需创建
查看所有的数据库:show dbs
如何查看都有那些命令:帮助 系统:
|
-
db.help()
数据库级别的帮助
Db.集合名字.help | 集合级别的帮助 |
例1:向php39数据库中的商品集合中插入一个商品的文档。
扩展:插入记录时如果记录中没有_id字段,Mongdb会自动添加上一个_id字段,这个字段的类型是ObjectId,值是一个字符串,这个字符串在全球是唯一的。
特点:mongodb执行的每个操作都是瞬间完成的,客户端执行命令时直接把命令发给服务器就接着处理下一个,不会等待服务器返回结果,所以客户端也不知道这次操作有没有成功,如果要知道结果还需要执行另一个命令:
特点:同一个集合中可以插入完全不相干的记录
官方不推荐这样保存数据,最好还是把数据存到相应的集合中不要混着存,会影响性能
例2:查询商品集合所有的商品
例3:修改一条记录db.表名.findOne({"条件"})
或
例4:删除一个集合db.表名.drop()
例5:取出年龄小于10的文档,改成年龄为99
第三个参数true的意思是,如果没有满足条件的记录,是否添加这条记录。第四个参数是把所有满足条件的都修改,默认false只修改一条记录。
mongodb权限机制
启动权限机制之前要先在MONGODB中添加管理员账号:
注意:
- 用户要属于某一个数据库
- 如果一个账号属于admin数据库,那么就是超级管理员
- 在使用账号登录时必须先切换到这个账号所在的数据库
-
添加管理员账号
Php39下的普通账号
以上是3版本下面是2版本
重新安装mongodb,安装时添加一个--auth参数
先把安装好的从服务中删除
重新安装mongodb,安装时添加一个--auth参数
重新安装完成之后需要在服务中开启服务,services.msc
现在就开启了权限机制
此时,如果不登录就不能操作数据库
必须先登录才行:
超级管理员登录必须先切换到admin数据库
如何使用PHP操作mongodb
php操作mongodb的代码基本上和命令行差不多。
要执行这个代码有个前提:php服务器上安装了MONGODB的扩展。端口号可以省略
php如何安装mongodb扩展?
先下载一个符合php服务器环境的php_mongo.dll文件
把dll文件复制到扩展文件下
修改php.ini文件添加一行
wamp修改apache下的phpforapache.ini
重启apache即可。
数据类型
基本上所有的类型都支持+ObjectId+正则表达式+函数【function(){}】….
mongodb存文件