php操作mongodb类和实例

近来学习了mongodb,刚好是做php开发的,随便写了php操作mongodb的封装类.

<?php
/**
 * Created by PhpStorm.
 * User: lee
 * Date: 2016/10/24
 * Time: 13:49
 */
namespace App\Http\Controllers\Api;
use App\Http\Common\ReturnApi;

/*
 *
 *
 mongdb常规操作

 */

class MongdbCommonController
{
    private static $conn;
    private static $mon;
    private static $error;
    private function __construct(){
        //self::$conn = new \MongoClient("mongodb://".env('MONGDB_USER').":".env('MONGDB_PASS')."@".env('MONGDB_HOST').":".env('MONGDB_PORT')."/".env('MONGDB_DB'));
        self::$conn = new \MongoClient("mongodb://".env('MONGDB_USER').":".env('MONGDB_PASS')."@".env('MONGDB_HOST').":".env('MONGDB_PORT'));
        //self::$conn = new \MongoClient("mongodb://".env('MONGDB_HOST').":".env('MONGDB_PORT'));
        $db = env('MONGDB_DB');
        self::$mon = self::$conn->$db;
    }

    public static function getInstance(){
        if(!(self::$conn instanceof self)){
            self::$conn = new self();
        }
        //return self::$conn->mydb;
        return self::$conn;
    }
    private function __clone(){
        trigger_error('Clone is not allowed');
    }//禁止克隆
    //创建索引
    public function ensureIndex($table, $index, $index_param=array())
    {
        $index_param['safe'] = 1;
        try {
            self::$mon->$table->ensureIndex($index, $index_param);
            return true;
        }
        catch (MongoCursorException $e)
        {
            self::$error = $e->getMessage();
            return false;
        }
    }

    //添加
    public function insert($table,$arr){
        try {
            self::$mon->$table->insert($arr, array('w'=>true));
            return true;
        }
        catch (MongoCursorException $e)
        {
            self::$error = $e->getMessage();
            return false;
        }
    }
    //更新
    public function update($table, $condition, $new_arr, $options=array())
    {
        $options['w'] = 1;
        if (!isset($options['multiple']))
        {
            $options['multiple'] = 0;
        }
        try {
            self::$mon->$table->update($condition, $new_arr, $options);
            return true;
        }
        catch (MongoCursorException $e)
        {
            self::$error = $e->getMessage();
            return false;
        }
    }
    //删除
    public function remove($table, $condition, $options=array())
    {
        $options['w'] = 1;
        try {
            self::$mon->$table->remove($condition, $options);
            return true;
        }
        catch (MongoCursorException $e)
        {
            self::$error = $e->getMessage();
            return false;
        }
    }

    //查找
    public function find($table, $query_condition, $result_condition=array(), $fields=array())
    {
        $cursor = self::$mon->$table->find($query_condition, $fields);
        if (!empty($result_condition['start']))
        {
            $cursor->skip($result_condition['start']);
        }
        if (!empty($result_condition['limit']))
        {
            $cursor->limit($result_condition['limit']);
        }
        if (!empty($result_condition['sort']))
        {
            $cursor->sort($result_condition['sort']);
        }
        $result = array();
        try {
            while ($cursor->hasNext())
            {
                $result[] = $cursor->getNext();
            }
        }
        catch (MongoCursorTimeoutException $e)
        {
            self::$error = $e->getMessage();
            return false;
        }
        return $result;
    }

    //查找一条记录
    public function findOne($table, $condition, $fields=array())
    {
        return  self::$mon->$table->findOne($condition, $fields);
    }


    //返回表的记录数
    public function count($table)
    {
        return  self::$mon->$table->count();
    }
    //返回错误信息
    public function getError()
    {
        return self::$error;
    }




}


操作实例:

use App\Http\Controllers\Api\MongdbCommonController;


 $db = MongdbCommonController::getInstance();
 $collection = 'tab';
 $data = array('tt'  =>'sdsd',
                 'pp'    =>  'ssdsdf');
 返回记录数
  echo $db->count($collection);
 //插入记录
  $db->insert($collection, array("id"=>2, "title"=>"asdqw"));
 //更新
  $db->update($collection, array("id"=>2),array('tt'=>'dfdfd',"gg"=>"bbb",'hh'=>'dfsdsd'));
 //查找记录
 echo '<pre>';
 print_r( $db->find($collection, array("tt"=>'dfdfd'), array("start"=>1,"limit"=>4)));
 //删除
 $db->remove($collection, array('tt'  =>'sdsd'));


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值