在这里首先说一下mongo 客户端安装完成有时会启动失败     这里解决办法就是 删除 D:\mongodb\db 下的 mongod.lock文件即可 再重新启动

首先下载mongodb php扩展

5.3 mongo driver下载:   更多版本  https://github.com/mongodb/mongo-php-driver/downloads
  http://downloads.mongodb.org/mongo-latest-php5.3vc6ts.zip

把DLL复制到extension目录,然后   如我安装时wamp集成环境  我得扩展目录是 E:\wamp\bin\php\php5.4.16\ext

接下来我们修改php.ini   如我的目录:E:\wamp\bin\php\php5.4.16\php.ini  添加  extension=php_mongo.dll即可

接下来就是操作mongodb了 :我这以我的程序为例

  这里我的程序使用框架是yii     您不必理会框架本身

  

<?php
header("Content-type:text/html;charset=utf-8;");
class CommentController extends Controller {
public $layout = false;
/**
* Mongodb 连接句柄
*
* @var $conn
*/
public $conn; /**
* 评论表空间
*
* @var $collection
*/
public $collection; /**
* 关系表空间
*
* @var $commentIndex
*/
public $commentIndex; /**
* 评论关系总表 结果集
*
* @var $relation
*/
private $relation; /**
* 加工后关系列表
*
* @var $relation_list
*/
private $relation_list = array (); /**
* page 当前页数
*
* @var $page
*/
public $page = 1; /**
* limit 最大页码数
*
* @var $limit
*/
public $limit = 10; /**
* query 关键词搜索
*
* @var $query
*/
public $query; /**
* yii pageObject
*/
public $pageObject = NULL; /**
* 删除关系list
*
* @var $deletelist
*/
private $deletelist = array (); /**
* 删除关系result
*
* @var $result
*/
private $result = array (); /**
* 评论总数
*
* @var $c_count
*/
public $c_count; /**
* Log 日志
*
* @var $Log
*/
private $Log = NULL; /**
* cArrayDataProvider
*
* @var cArrayDataProvider
*/
public $cArrayDataProvider = NULL;
/**
* @初始化应用数据
*/
public function init() {
$this->layout = false;
parent::init ();
$this->mongoInit ();
ini_set ( 'memory_limit', '1024M' );
$this->page = Yii::app ()->request->getParam ( 'page', $this->page );
$this->limit = Yii::app ()->request->getParam ( 'limit', $this->limit );
}
/**
* 数据库初始化,正式项目在配置文件中生成
* @mongodb
*/
public function mongoInit() {
try {
$this->conn = new MongoClient ( Yii::app ()->params ['host'] );
$this->collection = $this->conn->selectCollection ( Yii::app ()->params ['database'], Yii::app ()->params ['comment'] );
$this->commentIndex = $this->conn->selectCollection ( Yii::app ()->params ['database'], Yii::app ()->params ['commentIndex'] );
} catch ( MongoConnectionException $e ) {
exit ( '<p>Couldn\'t connect to mongodb, is the "mongo" process running?</p>' );
}
} /**
* Lists all models.
*/
public function actionIndex() {
$this -> c_count = $this->collection->count ();
if ($this -> c_count) {
$this->getCommentItem ( $this -> c_count );
//$data = array('pages' => $this->pageObject, 'total' => $this->c_count, 'countPage' => $countPage);
} else {
//$data = array ('pages' => $this->pageObject, 'total' => 0, 'countPage' => 0);
}
$this->render('list');
} /**
* load CArrayDataProvider
*/
protected function cArrayDataProvider(){
$this -> cArrayDataProvider = new CArrayDataProvider($this -> relation_list,array(
'keyField'=>false,
)); return $this -> cArrayDataProvider;
} /**
* 评论的所有数据集
*
* @throws Excepition
*/
public function getCommentItem($count) {
$this->cPagination ( $count );
$page = ($this->page - 1) * $this->limit;
$rows = $this->collection->find ()->sort ( array ('_id' => - 1 ))->limit ( $this->limit )->skip ( $page );
$this->relation_list = $this->_page ( $rows );
$this -> cArrayDataProvider();
return $this->relation_list;
} /**
* yii分页
*
* @param
* $count
*/
protected function cPagination($count = 0) {
$criteria = new CDbCriteria ();
$pager = new CPagination ( $count ? $count : $this->c_count );
$pager->pageSize = $this->limit;
$pager->applyLimit ( $criteria );
$this->pageObject = $pager;
return $this->pageObject;
} /**
* 关键词搜索
*/
public function actionSearch() {
$k = Yii::app ()->request->getParam ( 'k', NULL );
if (empty ( $k )) {
Yii::app ()->user->setFlash ( 'error', "搜索关键词为空!" );
$this->redirect ( Yii::app ()->request->urlReferrer );
} $this->query = array ("comment" => new MongoRegex ( "/{$k}/" ) ); $this -> c_count = $this->collection->find ( $this->query )->count ();
if ($this -> c_count) {
$this->cPagination ( $this -> c_count );
}
$page = ($this->page - 1) * $this->limit;
$rows = $this->collection->find ( $this->query )->sort(array('_id' => -1))->limit ( $this->limit )->skip ( $page );
$this->relation_list = $this->_page ( $rows ); $this -> cArrayDataProvider();
$this->render('list');
} /**
* 数据集处理
*
* @param array $rows
* @param boolean $handle
*/
protected function _page($rows, $handle = false) {
$rows_list = array ();
foreach ( $rows as $val ) {
$rows_list [] = $val;
}
unset ( $rows );
if (! $handle) {
return $rows_list;
}
return array_slice ( $rows_list, ($this->page - 1) * $this->limit, $this->limit );
} /**
* 用于构造提示信息的主体
* $word 分类
* $tip 提示信息
* $color blue or red
*
*/
protected function dialogContent($word,$tip,$color) {
switch($color) {
case 'red':
$str = '<p>'.$word.'<font style="color:red">'.$tip.'</font></p>';
break;
case 'blue':
$str = '<p>'.$word.'<font style="color:blue">'.$tip.'</font></p>';
break;
default:
$str = '<p>'.$word.'<font style="color:blue">'.$tip.'</font></p>';
break;
}
return $str;
} /**
* 删除评论
*/
public function actionRemove() {
$data = Yii::app ()->request->getParam ( 'data', NULL );
if (empty ( $data )) {
exit($this -> dialogContent('批量删除', '数据有问题!', 'red'));
}
if (is_array ( $data )) {
foreach ( $data as $k => $v ) {
try {
$this->collection->remove ( array ('_id' => ( object ) new MongoId ( $v['_id'] ) ) );
$this->delCommentRelation ( '0883B740-C3AE-8EF0-C03E-15128FEF6142', $v ['id'] );
//增加日志
$this->Log = new Log; //解决批量插入问题
date_default_timezone_set('PRC'); //设置时区
$operate_id = 2;
$this->Log->attributes = array(
'operate_id' => $operate_id, //操作人id
'uid' => 2, //用户uid
'type' => '删除', //日志类型 删除
'date' => date('Y-m-d H:i:s', time()), //操作时间
'detail' => '操作人:'.$operate_id.'删除了帖子id:'.$v ['id'] //详细
);
$this->Log->save();
} catch ( Exception $e ) {
echo $e->getMessage () . '<br>' . $e->getFile () . '<br>' . '第' . $e->getLine () . '行<br>';
}
}
unset ( $data );
} else {
throw new Exception ( '删除数据有问题,请查看程序' );
}
exit($this -> dialogContent('批量删除', '删除评论成功!', 'blue'));
} /**
* 删除关系入口
*
* @param int $id
* @param int $delid
*/
public function delCommentRelation($id, $delid) {
$this->query = array ('_id' => $id );
$this->relation = $this->commentIndex->findOne ( $this->query );
$this->relation_list = $this->relation ['index'];
foreach ( $this->relation_list as $value ) {
$this->deletelist [] = array_diff ( explode ( '_', $value ), array ($delid ) );
}
$this->deleteRelation ( $id );
}
// 删除关系
public function deleteRelation($id) {
foreach ( $this->deletelist as $key => $value ) {
if (! empty ( $value )) {
$this->result [] = implode ( '_', $value );
}
}
$this->result = array_unique ( $this->result ); // 楼层唯一性显示
$this->c_count = count ( $this->result );
$this->updateRelation ( $id );
}
// 更新
public function updateRelation($id) {
$set = array ('index' => $this->result, 'count' => $this->c_count ); $this->commentIndex->update ( array ("_id" => $id ), array ('$set' => $set ) );
// 更新完成销毁变量
$this->deletelist = $this->result = array ();
}
}

这里进行说明一下

/**
     * 数据库初始化,正式项目在配置文件中生成
     * @mongodb
     */
    public function mongoInit() {
        try {
            $this->conn = new MongoClient ( "mongodb://php:123456@127.0.0.1:27017/comment");  这里连接方式是授权方式 数据库是comment
            $this->collection = $this->conn->selectCollection ( "comment", "comment");  //数据库comment   集合相当于表 comment
            $this->commentIndex = $this->conn->selectCollection ("comment", "commentIndex");  //数据库comment   集合相当于表 commentIndex
        } catch ( MongoConnectionException $e ) {
            exit ( '<p>Couldn\'t connect to mongodb, is the "mongo" process running?</p>' );
        }
    }

//链接方法有很多如:

//*************************
//**   连接MongoDB数据库  **//
//*************************
//格式=>(“mongodb://用户名:密码 @地址:端口/默认指定数据库”,参数)
$conn = new Mongo();
//可以简写为
//$conn=new Mongo(); #连接本地主机,默认端口.
//$conn=new Mongo(“172.21.15.69″); #连接远程主机
//$conn=new Mongo(“xiaocai.loc:10086″); #连接指定端口远程主机
//$conn=new Mongo(“xiaocai.loc”,array(“replicaSet”=>true)); #负载均衡
//$conn=new Mongo(“xiaocai.loc”,array(“persist”=>”t”)); #持久连接
//$conn=new Mongo(“mongodb://sa:123@localhost”); #带用户名密码
//$conn=new Mongo(“mongodb://localhost:27017,localhost:27018″); #连接多个服务器
//$conn=new Mongo(“mongodb:///tmp/mongo-27017.sock”); #域套接字
//$conn=new Mongo(“mongodb://admin_miss:miss@localhost:27017/test”,array(‘persist’=>’p',”replicaSet”=>true)); #完整

这里是初始化mongodb

接下来就是操作了

     插入comment数据:

$postData = array (
                    'id' => 1,
                    'author' => '作者',
                    'comment' => '内容',
                    'date' => new MongoTimestamp (), //插入时间 这个是mongo的类
                    'type' => 'blog',  //类型
            );

  $this->comment->insert ( $postData);

-----------------------------------------------------------------------------------

  查询所有数据:

  $result = $this -> comment -> find();

  这里获取$result 是mongo结果集   不是二维数组

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

    var_dump($v);  //打印数据

  }

 ---------------------------------------------------------------------------------

  查询数据带条件

  $query = array('type' => 'blog', 'id' => 1);  //查询 type 为blog的 并且id为1的

  $result = $this -> comment -> find($query);

  这里获取$result 是mongo结果集   不是二维数组

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

    var_dump($v);  //打印数据

  }

---------------------------------------------------------------------------------------------

  查询数据带条件 分页

  $query = array('type' => 'blog', 'id' => 1);  //查询 type 为blog的 并且id为1的

  $result = $this -> comment -> find($query) ->limit ( 最大页码数 ) -> skip(跳过的页数);   这里是取出前十条记录   skip是跳过多少行  limit是取出多少

  跳过的页数 = (当前页数 -1)* 最大页码数

  这里获取$result 是mongo结果集   不是二维数组

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

    var_dump($v);  //打印数据

  }

----------------------------------------------------------------------------------------------------

  查询数据带条件 分页 排序

  $query = array('type' => 'blog', 'id' => 1);  //查询 type 为blog的 并且id为1的

  $result = $this -> comment -> find($query) ->limit ( 最大页码数 ) -> skip(跳过的页数)-> sort(array('_id' => -1));   //这里_id是mongo自动生成的

  1正序   -1 倒序

  这里是取出前十条记录   skip是跳过多少行  limit是取出多少

  跳过的页数 = (当前页数 -1)* 最大页码数

  这里获取$result 是mongo结果集   不是二维数组

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

    var_dump($v);  //打印数据

  }

  ------------------------------------------------------------------------------------------------------------------

  取出一个表的总数

  $count= $this -> comment ->count();

  echo $count;

  ------------------------------------------------------------------------------------------------------------------

  取出一个表的总数 带条件

  $query = array('id' => 1);

  $count= $this -> comment ->find($query) -> count();

  echo $count;

-----------------------------------------------------------------------------------------------------------------------------------

  查询一条数据

  $id = 'mongoid';

  $query = array('_id' => ( object ) new MongoId($id));

  $findOne= $this -> comment ->findOne($query);

---------------------------------------------------------------------------------------------------------------------------------

  删除数据

  $id = 'mongoid';

  $query = array('_id' => ( object ) new MongoId($id));

  $findOne= $this -> comment ->remove($query);

---------------------------------------------------------------------------------------------------------------------------------

  修改数据

    $id = 'mongoid';

$where = array('_id' => ( object ) new MongoId($id));
        $updateData  = array('$set' => array('comment' => '修改内容'));
        $result = $this -> collection -> update($where, $updateData);

   return $result['updatedExisting'];  成功返回 true  失败 false

php 操作mongodb的更多相关文章

  1. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  2. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  3. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  4. PHP操作Mongodb之增删改查篇

    之前,我讲解过PHP中mongodb扩展的安装,及启动,链接操作[忘记了?去看看吧!PHP操作Mongodb之一].本文主要就是讲在PHP中Mongodb的增加,查询,修改及删除数据的操作. 1.增加 ...

  5. PHP操作Mongodb之高级查询篇

    本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...

  6. php操作mongodb中的ISODate格式日期

    mongodb 中数据记录的日期格式为"dateCreated" : ISODate("2011-12-20T07:22:50.836Z")经过翻阅php官网中 ...

  7. nodejs操作mongodb

    一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...

  8. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  9. Python 操作 MongoDB

    原文 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Pyt ...

  10. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

随机推荐

  1. 项目源码--Android3D影音播放器源码

      下载源码   技术要点: 1.本地音乐管理 2.音频流的解码 3. UI控件的综合使用 4. 视频流的解码 5. 动态更换皮肤 6. 3D效果的实现 7. 源码带详细的中文注释 ...... 详细 ...

  2. 小白日记30:kali渗透测试之Web渗透-扫描工具-Skipfish

    WEB渗透-skipfish Skipfish是一个命令行模式,以C语言编写的积极的Web应用程序的安全性侦察工具,没有代理模式. 它准备了一个互动为目标的网站的站点地图进行一个递归爬网和基于字典的探 ...

  3. SpringMVC的简单示例

    首先导入所需的jar包,项目目录结构如下: 之后需要配置一下web.xml文件,内容如下: <?xml version="1.0" encoding="UTF-8& ...

  4. Android(java)学习笔记117:英文朗诵android App编写实例

    1.首先,我先把代码放到下面: package com.himi.speaker; import java.util.Locale; import android.app.Activity; impo ...

  5. Debian 7 安装 Emacs 24.3

    Emacs 24.3出来好久了,但是在Debian 7里还是Emacs 23的版本. 以下是安装步骤(9步): -dev libncurses5-dev autoconf automake texin ...

  6. maven管理多模块系统

    1.创建mydemo项目cd d:\myworkmvn archetype:create -DgroupId=com.example.mydemo -DartifactId=mydemo 生成myde ...

  7. 一个不错的java的配置文件的设置

    package property; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  8. Linux free字段解析

    下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][1] = 24677460 FO[3][2 ...

  9. 关于css雪碧图sprite

    天气转凉了,又开始贪恋暖暖的被窝了. 早上不想起床的时候在被窝里看了有关于雪碧图的视频. 1.使用场景 V导航条,登录框img标签多次载入,性能低 X大图banner按需加载,如果做成雪碧图一次加载就 ...

  10. 如何用代码开启“个人热点”功能?如何用代码把iOS设备设置成一个无线路由?

    不好意思,你办不到.苹果不允许.因为你没有权限.