PHP操作MongoDB创建简单留言板

来源:互联网 发布:淘宝上杜蕾斯是真的吗 编辑:程序博客网 时间:2024/05/19 05:40

随着big data时代的到来,单纯的关系型数据库已经不能满足海量数据的查询要求了。近几年,NoSQL数据库异常火爆,是用于处理大数据的利器。

关于MongoDB的介绍有很多,这里不再赘述,只是讲解其核心的BSON,就是二进制的JSON,在没有特殊说明的情况下,就可以看成是JSON,语法类似

{name: 'csdn',post: [{'title': 'blog',content: 'this is a blog'},{'title': 'space', 'content': 'this is a space'}]}, 和PHP的关联数组是对应的,而且可以看到post的最外层也是一个数组,可以等价于 

array(

array('title' => '', 'content' => ''),

array('title' => '', 'content' => '')

)

所以上面的JSON等价于PHP里面的多位数组:

array(

'name' => 'csdn',

'post' => array(

array('title' => '', 'content' => ''),

array('title' => '', 'content' => '')

)

)

有了上面的基础,就可以开始下面的学习了。

1 连接mongodb

连接的时候不能简单的使用超级管理员的权限连接,这个涉及到一个mongodb的授权问题,需要给每个数据库创建用于权限,例如要给test用户创建一个root用户:

use test; // switch database

db.addUser('root','123');

db.auth('root', '123');

在mongodb的模式下创建用户,然后断开当前的超级管理员连接,使用创建的账号连接到test数据库

mongo -uroot -p123 localhost:27017/test

在使用php进行连接时候:

$mongo = new Mongo(); //  超级管理员连接方式,不起作用了,因为当前的启动方式不是超级管理员方式

$mongo = new Mongo("mongodb://{$username}:{$password}@localhost:27017/test");

因为最后的操作都是在collection(相当于table)中进行,首先要选择DB和Collection。可以使用API selectDB , selectCollection

2  insert 数据到mongodb

从html表单中post数据到PHP中进行处理,这里过滤掉一些验证,介绍核心部分。 首先需要构建交错数组

$info['user'] = $_POST['user'];

$post['title'] = $_POST['title'];

$post['content'] = $_POST['content'];

$info['post'] = array($post);

这样就构建了前面提到的数据的形式,然后就可以进行插入数据 insert($info)。这样就解决insert的问题,但是马上另一个问题又出现了,如果相同user的数据又post到PHP中了,按照上面的逻辑,就应该再添加一条记录,这显然是不合适的,同一个user提交的content应该归档在一下(这里不考虑一些用户的同名),那么对应的就应该是update而不是insert了,就是向上面json中post: [{}],添加一个{} 变成post:[{}, {}] , 需要向[] 中push一个{}。

mongodb的update操作比较复杂,有很多魔术方法,push就是其中一个,概念从javascript中而来,语法如下

update({}, {$push:{post: {} } }) 

第一个{} 是要查找更新的数据。

有了上面的讲解,就应该首先判断user是否已经存在:

find(array('user'=>$info['user']))->count()==0   

不存在就insert,存在就update:

$push = array();
$push['$push'] = array('post'=>$post);;

     update(array('user'=>$info['user']),$push)

这样就可以将相同用户提交的内容归类在一起。

3 遍历显示

由于数据嵌套的层次较深,需要使用多个loop进行,效率方面暂时不考虑(可以再mongodb中使用index)。

首先要获取结果集的一个cursor,然后使用cursor进行外层遍历:

while($cursor->hasNext()){  $cur = $cursor->getNext(); }

这样就获取了上面提到的那个PHP数据,接下来怎么遍历,方法就比较多了,重点讲下post的遍历,post对应一个二维数组,外层是数字索引

$cnt = count($value);$i=0;

while($i<$cnt){

$p = $value[$i];

foreach($p as $k=>$v){

}

}

这样就可以遍历得到title和content的内容


以上简单介绍了一些基本的PHP操作mongodb,欢迎拍砖。

原创粉丝点击