MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
特点:
应用场景:
不适用场景:
二、掌握几个概念
1、文档。
文档是mongoDB中数据的基本单元,类似关系数据库的行,
多个键值对有序地放置在一起便是文档
{name:’xiaogang’,age:12,email:’nihao@sohu.com’}
{name:’xiowanzi’,age:11}
MongoDB 中以文档的方式存取记录,如一条记录格式如下:
{ “username”:”Tom”, “age”:10 }
{ "username":"Tom" , "age" : "10" }
{“Username”:”Tom”,”age”:10}
注意:
1.以上是两个不同的文档,MongoDB区分大小写的数据类型,第一个age字段是数字类型,第二个age是字符串类型。
2. 每一个文档尺寸不能超过16M
2、集合,
多个文档组成一个集合,就类似于关系型数据库里面的表。
集合就是一组文档,集合类似于表
无模式是指,在同一个集合中可以包含不同格式的文档,如:
{ "Name" : "Mongodb" , "Type" : "Nosql" }
{ "UserName" : "Tom" , "age" : 20 , "Gender" : "male" }
以上两个文档可以放在同一个集合中。
模式自由(schema-free):意思是集合里面没有行和列的概念,
MongoDB中的集合不用创建、没有结构,所以可以放不同格式的文档。
3、数据库
多个集合可以组成数据库。一个mongoDB实例可以承载多个数据库,他们之间完全。
Mongodb中的数据库和Mysql中的数据为概念类似,只是无需创建。
一个数据库中可以有多个集合。
一个集合中可以有多个文档。
三、体系结构
4、安装软件
1、下载解压后,把该软件拷贝到指定的一个目录。一般便于管理,和其他的环境文件拷贝到同一级目录下面。
重点是bin目录里面一些命令
2、在拷贝的mongodb的目录中,新建一个目录(存储数据文件),和一个文件(日志文件)
3、以管理员的方式进入cmd,进入到mongodb的bin目录里面。
安装方式一:安装成window的一个服务。
Mongod.exe --install --dbpath 数据目录 --logpath 日志文件
默认端口是:27017则证明启动成功。
安装方式二:直接启动,无需安装。
4、客户端连接mongodb服务器。
使用mongo命令来连接服务器。
默认连接本机的27017,如果要连接其他服务器,可以执行:
语法:
mongo.exe ip地址:端口号/数据库名 (默认连接test数据库)
如:
mongo.exe localhost:27017/abc -->连接本地27017端口,abc数据库
注:可以通过 mongo.exe –help 查看更多命令
五、入门语句
1、创建数据库,
语法: use 数据库名称
如果数据库存在,则是切换,如果不存在则是创建。如果创建了数据库,则没有任何操作,则会自动删除。
2、show dbs 查看数据库。
3、db命令表示当前数据库,直接输入 db则返回所在数据库的名字。
4、建立集合
db.集合名.insert({name:’xiao’})
5、show tables 查看当前数据库下面的集合
6、帮助命令
在数据库级别查看帮助命令
db.help()
在集合级别下面查看帮助命令
在全局下面查看帮助命令
六、mongodb的增删改查操作
1、添加数据(insert/save)
语法:db.集合名.insert({键1:值1,键2:值2 ………….})
比如:向user集合里面添加文档。
可以使用js的循环一次性添加多个文档。
注: _id 字段是系统自动生成的,也可以自己指定任何类型的字,但值不能重复。
ObjectId类型:
对象id是文档中唯一的12位的ID
时间戳 |机器码|PID|计数器
mongodb支持的数据类型:
2、修改文档
db.集合名.update({条件},{新值})
案例1:比如把年龄等于5的文档,名字改成xiaotou
db.user.update({age:5},{新的文档}) 相当于是文档的替换
案例2:比如把年龄等于6的文档,名字改为libai,其他的键值还必须存在。
使用修改器:$set 修改某个键值
db.集合名.update({条件},{$set:{name:’libai’}})
3、删除
删除文档
语法:db.集合.remove({条件})
案例1:比如删除年龄等于10的文档
案例2比如删除年龄大于等于7的文档
大于使用,操作法来完成
常用操作符:
$lt , $lte , $gt , $gte ( < , <= , > , >= ), $ne ( <> ) ,$in , $nin , $or , $not,
$mod (取模), $exists, $where
语法:
db.集合名.remove({age:{‘$gte’:7}})
删除集合
db.集合名.drop()
删除数据库
db.dropDatabase()
4、查询文档
语法:db.集合名.find({条件})
案例1:比如查询年龄等于4的文档
db.user.find({age:4})
案例2:比如查询年龄大于4的文档,只显示出age键值,其他键值不显示
db.集合名.find({条件},{age:1})
为1则显示age键值
为0则显示除了age键值
案例3:根据年龄倒叙显示文档
db.集合名.find().sort({age:-1}) -1则为倒叙,1则为正序(默认)
案例4:想取出集合里面的前3个文档
db.集合名.find().limit(3)
案例4:想取出集合里面从3个文档到5个文档之间的文档。
db.集合名.find().skip(2).limit(3)
案例5,查看集合里面有多少个文档
db.集合名.find().count() count(1)代表使用前面的条件进行删选
七、mongodb中权限验证
mongodb里面的用户名和密码是属于单个数据库的。
1、创建用户
分两步,(1)选择数据库(2)具体的创建用户
语法:
use 数据库的名称
db.addUser(‘用户名’,’密码’,是否只读)如果第三个参数为ture则只能查询不能修改,默认是false
注意:在给数据库创建普通用户名之前,一定要创建一个超级管理员。
案例1创建超级管理员:
案例2:给php数据库创建一个管理员
创建的用户信息存储在当前数据库system.users集合里面。
2、数据库用户验证,
要使用用户名验证,要开启数据库的权限验证。
如何开启:
在开始启动mongdb时,执行,
mongod.exe --dbpath 数据库文件 --logpath 日志文件路径 --auth
如果是以window服务安装的,则要卸载服务重新安装,在安装命令后面添加 --auth
如何卸载mon godb的服务:
先停止服务,进入到cmd bin目录里面,执行mongod --remove即可
如果没有经过验证,则直接操作,会报如下 的提示
验证的语法:分两步:(1)选择数据库,(2)执行验证
use php
db.auth(用户名,密码)
3、超级管理员验证:
use admin
db.auth(‘超级管理员名称’,’ 密码’)
说明:每个数据库都对应一套用户名和密码,只要开启了授权登陆,都必须经过验证,假设一开始就进行了管理员的认证,那后面所有的操作都不需要进行验证
4、用户的管理。
删除用户,或重新设置密码
(1)删除用户:可以在system.users集合里面直接把该文档给删除。
db.system.users.find()
db.system.users.remove({“user”:”test”}) 删除test 账号
修改:
(2)修改用户密码
use test
db.changeUserPassword(用户名,新密码)
八、php支持mongodb
1、安装扩展,准备扩展文件
安装扩展,要注意支持的php版本,vc几编译的,nts或ts的
2、把对应的扩展文件拷贝的php的扩展目录里面(ext目录)
3、打开php.ini文件加载扩展。
4、通过phpinfo()函数来进行测试
九、php操作mongodb
连接mongodb服务器,
//MongoDB有用户名密码并指定数据库blog
//$conn = new Mongo("mongodb://${username}:${password}@localhost/blog");
//$m=new Mongo("mongodb://hanhao:123456@localhost:1111/php");
$m=new Mongo("mongodb://root:1234@localhost:1111/admin");
$db=$m->selectDb("php");
$data = $db->user->find(array('age'=>array('$gt'=>2)));
print_r($data);
foreach($data as $v){
echo 'name:'.$v['name'].'---'.$v['age'].'
';
选择数据库
$db=$m->selectDb(数据库的名称);
具体的操作
10、数据的备份、还原、导入、导出
1、导出
2、导入
3、备份
4、还原
http://cnodejs.org/topic/51d249dcd44cbfa3040bd28a 存储图片或者视频