以前都是玩mysql的,从这周开始接触mongoDB,并且用php查了一波mongoDB。其实和mysql差不多,只是换了一个数据库,所以查询语句的写法不一样。在这里简单总结一下。
一、mongoDB
mysql是关系数据库,mongoDB是非关系数据库,nosql(not only sql 我以前一直以为就是 no-sql)。
二、php操作mongoDB
对于mongoDB的了解也就仅限于此。接下来的任务就是用php操作mongoDB,这里主要涉及的是简单的查询。
这次的学习有点急功近利,就想着赶紧学会用,根本没有对mongoDB有一个很系统、很深入的了解。(当然时间不允许啦,不然强迫症的我估计会从头学起啊。)
php操作mongoDB,我是从另外的一个教程学习的,现在把地址贴在这。
我本以为这样就可以顺利完成任务,其实我还是图样。
这样讲没什么意思,我还是上代码吧。
<?php
// connect
$m = new MongoClient();
// select a database
$db = $m->HT_Email;
// select a collection (analogous to a relational database's table)
$collection = $db->Email;
$cc= isset($_REQUEST['cc'])?($_REQUEST['cc']):"";
$from = isset($_REQUEST['from'])?($_REQUEST['from']):"";
$to = isset($_REQUEST['to'])?($_REQUEST['to']):"";
$attach = isset($_REQUEST['attach'])?($_REQUEST['attach']):"";
$subject = isset($_REQUEST['subject'])?($_REQUEST['subject']):"";
//where
$query = array();
if (!empty($cc)) {
$query = array_merge(array('cc_user'=>new MongoRegex("/.*".$cc.".*/i")),$query);
}
if (!empty($from)) {
$query = array_merge(array('from_user'=>new MongoRegex("/.*".$from.".*/i")),$query);
}
if (!empty($to)) {
$query = array_merge(array('to_user'=>new MongoRegex("/.*".$to.".*/i")),$query);
}
if (!empty($attach)) {
$query = array_merge(array('attachments'=>new MongoRegex("/.*".$attach.".*/i")),$query);
}
if (!empty($subject)) {
$query = array_merge(array('subject'=>new MongoRegex("/.*".$subject.".*/i")),$query);
}
//page
$pagesize = 10; //每页显示的数据条数
$page = isset($_GET['page'])?intval($_GET['page']):1; //获取页数信息
$offset = ($page - 1) * $pagesize; //偏移量( //获取limit的第一个参数的值 offset ,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。 (传入的页数-1) * 每页的数据 得到limit第一个参数的值)
$total = $collection->find($query)->skip(0)->count(true);
$pagenum = ceil($total/$pagesize); //获得总页数
if ($page<1) {
$page=1;
}
if ($page>$pagenum){
$page= $pagenum;
}
if($page<10){
$start =1 ;
$end = 9;
}
elseif ($page>=10 && $page<($pagenum-9+1))
{
$start =$page -4;
$end = $page +4;
}
elseif ($page>=($pagenum-9+1))
{
$start= $pagenum-9+1;
$end = $pagenum;
}
$pre= $page-1;
$next= $page+1;
$page_params = "&from=$from&to=$to&subject=$subject&cc=$cc&attach=$attach";
//find
$cursor = $collection->find($query)->limit($pagesize)->skip($offset);
?>
代码都有注释,我还是简单解释一下我研究这一段的心路历程。
刚开始就是连接数据库啊,这里因为web和mongoDB在一台服务器上,所以直接省略了参数。
选择数据库和集合。
接下来就是接收前端页面传来的参数。这里不用说了吧,input的name和php的request对应。
然后写查询条件,在sql里就是where。
首先判断你有没有接收到参数,如果非空,开始写条件。
mongoDB的条件是写在一个数组中,你要查哪个字段,值是什么。
这里的MongoRegex是用来模糊匹配的。
array_merge是数组的合并,用来实现多条件查询。
接下来是分页,这个之前讲过。需要注意的是$total的计算。就要用到mongoDB统计的语法count()。
还要注意的一点就是,要写翻页参数。
查询语句是find。把我们刚才构造好的查询条件当做参数就好了。
翻页的查询语句是用limit和skip来实现的。这里类比mysql的limit $pagesize,$offset 很容易理解。
翻页显示页数的代码和mysql一样,这里就不写了。
至此,就可以很简单的查询mongoDB的数据。
mongoDB是一条新的路,希望自己可以在这方面再深入学习。