1.MongoDB简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
2.MongoDB特点
MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
MongoDB安装简单。
3.MongoDB安装
在没安装mogonDB之前,我觉得它很难安装成功,熟悉了安装过程,其实很简单。
首先,从mongoDB官网下载对应服务器的版本。(https://www.mongodb.com/download-center#community)
在进行安装,安装成功后,在对应的盘建立data目录,在data目录下在建立db目录,找到mongoDB安装的位置,进入到bin目录下,双击mongod.exe.会弹出一个命令框信息,到此,mongoDB就安装成功了。
问题:双击mongod.exe出现闪退的情况,在安装MongoDB目录下找到一个lock的文件,删除它,然后双击就不会出现闪退的现象
4.安装php扩展
个人觉得这步是最烦的,我安装好久才成功
4.1先查看自己的php版本号,可以通过 访问localhost/phpinfo.php查看,建议上网查下需要了解的信息
4.2下载php_mongo.dll对应得php版本号,这个很关键。
4.3在对应的环境下,我是在C:\phpstudy\php\php-5.4.45\ext放入下载的php_mongo.dll
4.4 在C:\phpstudy\php\php-5.4.45\php.ini配置文件中 添加 extension=php_mongo.dll(建议放在很多个extension一块)
4.5重启服务器。通过 访问localhost/phpinfo.php查看 出现 mongo代表安装成功
5.php对mongoDB的操作
5.1 连接
$con=new MongoClient();
参数简单说明:不写代表 连接本地主机,默认端口
安整格式:(“mongodb://用户名:密码 @地址:端口/默认指定数据库”,参数)
eg:(“mongodb://admin_miss:miss@localhost:27017/test”,array(‘persist’=>’p',”replicaSet”=>true))
5.2 选择数据库
$db=$con->test;
或者 $db=$con->selectDB('test');
当test不存在时,会自动创建test数据库,因此,在开发中不要写错单词
5.3 选择集合(在mysql中对应选择表)
$collection=$db->column;
column不存在时会自动创建
5.4简单写法
$collection=$con->test->column;
5.5插入数据
<?php
header("content-type:text/html;charset=utf-8");
$t=new MongoClient(); //连接mongo
$m=$t->test;//选择数据库
$collection=$m->column; //选择集合
$t=time();
$document=array(
'title'=>'Mongo 教程',
'data'=>'123456',
'time'=>$t,
'url'=>'http://www.baidu.com',
);
//插入数据
$collection->insert($document);
5.6查询数据
<?php
header("content-type:text/html;charset=utf-8");
$t=new MongoClient(); //连接mongo
$m=$t->test;//选择数据库
$collection=$m->column; //选择集合
$t=time();
$document=array(
'title'=>'Mongo 教程',
'data'=>'123456',
'time'=>$t,
'url'=>'http://www.baidu.com',
);
//查询数据
$result=$collection->find();
foreach($result as $value){
var_dump($value);
echo "<br>";
}
查询文档记录数:
$collection->count(); #全部
$collection->count(array('title'=>'Mongo 教程')) ; #加上条件
$collection->count(array('age'=>array('$gt'=>10,'$lt'=>20))); #大于10,小于20
$collection->find()->limit(5)->skip(2); #limit 代表取的数据条数, skip代表从哪里开始取(从0开始计数)
$collection->find()->snapshot(); # 得到聚合中所有的文档
查询指定的id
$collection->find(array('_id'=>new MongoId('59bcd23a5c36b5940e000034')));
查询指定的字段
$result=$collection->find(array('title'=>'Mongo 教程','time'=>1505546761));
模糊查询
$result=$collection->find(array('title'=>new MongoRegex('/user/'))); // 相当于 title like %user% // '/user$/' 匹配以user结尾 '/^user/' 匹配以user开始
查询一条数据
$collection->findOne();
注意:使用findOne()获得的结果集不能使用snapshot(),fields()等函数
fields() 列显示不显示
$result=$collection->find()->fields(array('title'=>true));
true代表显示该字段的数据,反之 false代表不显示该字段的数据
注意:不能同时出现true和false
5.7修改数据
<?php
header("content-type:text/html;charset=utf-8");
$t=new MongoClient(); //连接mongo
$m=$t->test;//选择数据库
$collection=$m->column; //选择集合
$t=time();
$document=array(
'title'=>'Mongo 教程',
'data'=>'123456',
'time'=>$t,
'url'=>'http://www.baidu.com',
);
//修改数据
$collection->update(array('title'=>'Mongo 教程'),array('$set'=>array('title'=>'Mongo')));
$result=$collection->find();
foreach($result as $value){
var_dump($value);
echo "<br>";
}
// 将username=user2 的 regtime+100
$con->update(array('username'=>'user2'),array('$inc'=>array('regtime'=>100)));
修改指定id的数据
$collection->update(array('_id'=>new MongoId('59bcd1ea5c36b51c1300002a')),array('$set'=>array('title'=>'Mongo 教程')))
比较下面三个例子
$where=array(‘column_name’=>’col123′);
$newdata=array(‘column_exp’=>’GGGGGGG’,'column_fid’=>444);
$result=$collection->update($where,array(‘$set’=>$newdata)); #$set:让某节点等于给定值,类似的还有$pull $pullAll $pop $inc
/*
* 结果:
* 原数据
* {“_id”:ObjectId(“4d635ba2d549a02801000003″),”column_name”:”col123″,”column_exp”:”xiaocai”}
* 被替换成了
* {“_id”:ObjectId(“4d635ba2d549a02801000003″),”column_name”:”col123″,”column_exp”:”GGGGGGG”,”column_fid”:444}
*/
//** 替换更新 **/
$where=array(‘column_name’=>’col709′);
$newdata=array(‘column_exp’=>’HHHHHHHHH’,'column_fid’=>123);
$result=$collection->update($where,$newdata);
/*
* 结果:
* 原数据
* {“_id”:ObjectId(“4d635ba2d549a02801000003″),”column_name”:”col709″,”column_exp”:”xiaocai”}
* 被替换成了
* {“_id”:ObjectId(“4d635ba2d549a02801000003″),”column_exp”:”HHHHHHHHH”,”column_fid”:123}
*/
//** 批量更新 **/
$where=array(‘column_name’=>’col’);
$newdata=array(‘column_exp’=>’multiple’,’91u’=>684435);
$result=$collection->update($where,array(‘$set’=>$newdata),array(‘multiple’=>true));
/**
* 所有’column_name’='col’都被修改
*/
5.8删除数据
$collection->remove(); #删除collection里面的所有数据
<?php
header("content-type:text/html;charset=utf-8");
$t=new MongoClient(); //连接mongo
$m=$t->test;//选择数据库
$collection=$m->column; //选择集合
$t=time();
$document=array(
'title'=>'Mongo 教程',
'data'=>'123456',
'time'=>$t,
'url'=>'http://www.baidu.com',
);
//删除数据
$collection->remove(array('title'=>'Mongo')); #删除指定字段条件数据
$collection->remove(array('_id'=>new MongoId('59bcd1ea5c36b51c1300002a'))); #删除指定id数据
$collection->remove(array('title'=>'Mongo'),array('justOne'=>true)); #删除指定字段条件数据的一条记录
5.9创建索引,排序
$collection->ensureIndex(array('savetime'=>-1)); //1升序,-1降序
$re = $collection->find()->sort(array('savetime'=>-1))->limit($pageSize)->skip($startPage); // sort排序