`

PHP Mongodb API参考

 
阅读更多
<?php  
/*** Mongodb类** examples:   
* $mongo = new HMongodb("127.0.0.1:11223"); 
* $mongo->selectDb("test_db"); 
* 创建索引 
* $mongo->ensureIndex("test_table", array("id"=>1), array('unique'=>true)); 
* 获取表的记录 
* $mongo->count("test_table"); 
* 插入记录 
* $mongo->insert("test_table", array("id"=>2, "title"=>"asdqw")); 
* 更新记录 
* $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb")); 
* 更新记录-存在时更新,不存在时添加-相当于set 
* $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"),array("upsert"=>1)); 
* 查找记录 
* $mongo->find("c", array("title"=>"asdqw"), array("start"=>2,"limit"=>2,"sort"=>array("id"=>1))) 
* 查找一条记录 
* $mongo->findOne("$mongo->findOne("ttt", array("id"=>1))", array("id"=>1)); 
* 删除记录 
* $mongo->remove("ttt", array("title"=>"bbb")); 
* 仅删除一条记录 
* $mongo->remove("ttt", array("title"=>"bbb"), array("justOne"=>1)); 
* 获取Mongo操作的错误信息 
* $mongo->getError(); 
*/  
  
class HMongodb {  
  
    //Mongodb连接  
    var $mongo;  
  
    var $curr_db_name;  
    var $curr_table_name;  
    var $error;  
  
    /** 
    * 构造函数 
    * 支持传入多个mongo_server(1.一个出问题时连接其它的server 2.自动将查询均匀分发到不同server) 
    * 
    * 参数: 
    * $mongo_server:数组或字符串-array("127.0.0.1:1111", "127.0.0.1:2222")-"127.0.0.1:1111" 
    * $connect:初始化mongo对象时是否连接,默认连接 
    * $auto_balance:是否自动做负载均衡,默认是 
    * 
    * 返回值: 
    * 成功:mongo object 
    * 失败:false 
    */  
    function __construct($mongo_server, $connect=true, $auto_balance=true)  
    {  
        if (is_array($mongo_server))  
        {  
            $mongo_server_num = count($mongo_server);  
            if ($mongo_server_num > 1 && $auto_balance)  
            {  
                $prior_server_num = rand(1, $mongo_server_num);  
                $rand_keys = array_rand($mongo_server,$mongo_server_num);  
                $mongo_server_str = $mongo_server[$prior_server_num-1];  
                foreach ($rand_keys as $key)  
                {  
                    if ($key != $prior_server_num - 1)  
                    {  
                        $mongo_server_str .= ',' . $mongo_server[$key];  
                    }  
                }  
            }  
            else  
            {  
                $mongo_server_str = implode(',', $mongo_server);  
            }                  }  
        else  
        {  
            $mongo_server_str = $mongo_server;  
        }  
        try {  
            $this->mongo = new Mongo($mongo_server, array('connect'=>$connect));  
        }  
        catch (MongoConnectionException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }  
    }  
  
    function getInstance($mongo_server, $flag=array())  
    {  
        static $mongodb_arr;  
        if (emptyempty($flag['tag']))  
        {  
            $flag['tag'] = 'default';          }  
        if (isset($flag['force']) && $flag['force'] == true)  
        {  
            $mongo = new HMongodb($mongo_server);  
            if (emptyempty($mongodb_arr[$flag['tag']]))  
            {  
                $mongodb_arr[$flag['tag']] = $mongo;  
            }  
            return $mongo;  
        }  
        else if (isset($mongodb_arr[$flag['tag']]) && is_resource($mongodb_arr[$flag['tag']]))  
        {  
            return $mongodb_arr[$flag['tag']];  
        }  
        else  
        {  
            $mongo = new HMongodb($mongo_server);  
            $mongodb_arr[$flag['tag']] = $mongo;  
            return $mongo;                  }          }  
  
    /** 
    * 连接mongodb server 
    * 
    * 参数:无 
    * 
    * 返回值: 
    * 成功:true 
    * 失败:false 
    */  
    function connect()  
    {  
        try {  
            $this->mongo->connect();  
            return true;  
        }  
        catch (MongoConnectionException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }  
    }  
  
    /** 
    * select db 
    * 
    * 参数:$dbname 
    * 
    * 返回值:无 
    */  
    function selectDb($dbname)  
    {  
        $this->curr_db_name = $dbname;  
    }  
  
    /** 
    * 创建索引:如索引已存在,则返回。 
    * 
    * 参数: 
    * $table_name:表名 
    * $index:索引-array("id"=>1)-在id字段建立升序索引 
    * $index_param:其它条件-是否唯一索引等 
    * 
    * 返回值: 
    * 成功:true 
    * 失败:false 
    */  
    function ensureIndex($table_name, $index, $index_param=array())  
    {  
        $dbname = $this->curr_db_name;  
        $index_param['safe'] = 1;  
        try {  
            $this->mongo->$dbname->$table_name->ensureIndex($index, $index_param);  
            return true;  
        }  
        catch (MongoCursorException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }  
    }  
  
    /** 
    * 插入记录 
    * 
    * 参数: 
    * $table_name:表名 
    * $record:记录 
    * 
    * 返回值: 
    * 成功:true 
    * 失败:false 
    */  
    function insert($table_name, $record)  
    {  
        $dbname = $this->curr_db_name;  
        try {  
            $this->mongo->$dbname->$table_name->insert($record, array('safe'=>true));  
            return true;  
        }  
        catch (MongoCursorException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }  
    }  
  
    /** 
    * 查询表的记录数 
    * 
    * 参数: 
    * $table_name:表名 
    * 
    * 返回值:表的记录数 
    */  
    function count($table_name)  
    {  
        $dbname = $this->curr_db_name;  
        return $this->mongo->$dbname->$table_name->count();  
    }  
  
    /** 
    * 更新记录 
    * 
    * 参数: 
    * $table_name:表名 
    * $condition:更新条件 
    * $newdata:新的数据记录 
    * $options:更新选择-upsert/multiple 
    * 
    * 返回值: 
    * 成功:true 
    * 失败:false 
    */  
    function update($table_name, $condition, $newdata, $options=array())  
    {  
        $dbname = $this->curr_db_name;  
        $options['safe'] = 1;  
        if (!isset($options['multiple']))  
        {  
            $options['multiple'] = 0;          }  
        try {  
            $this->mongo->$dbname->$table_name->update($condition, $newdata, $options);  
            return true;  
        }  
        catch (MongoCursorException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }          }  
  
    /** 
    * 删除记录 
    * 
    * 参数: 
    * $table_name:表名 
    * $condition:删除条件 
    * $options:删除选择-justOne 
    * 
    * 返回值: 
    * 成功:true 
    * 失败:false 
    */  
    function remove($table_name, $condition, $options=array())  
    {  
        $dbname = $this->curr_db_name;  
        $options['safe'] = 1;  
        try {  
            $this->mongo->$dbname->$table_name->remove($condition, $options);  
            return true;  
        }  
        catch (MongoCursorException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }          }  
  
    /** 
    * 查找记录 
    * 
    * 参数: 
    * $table_name:表名 
    * $query_condition:字段查找条件 
    * $result_condition:查询结果限制条件-limit/sort等 
    * $fields:获取字段 
    * 
    * 返回值: 
    * 成功:记录集 
    * 失败:false 
    */  
    function find($table_name, $query_condition, $result_condition=array(), $fields=array())  
    {  
        $dbname = $this->curr_db_name;  
        $cursor = $this->mongo->$dbname->$table_name->find($query_condition, $fields);  
        if (!emptyempty($result_condition['start']))  
        {  
            $cursor->skip($result_condition['start']);  
        }  
        if (!emptyempty($result_condition['limit']))  
        {  
            $cursor->limit($result_condition['limit']);  
        }  
        if (!emptyempty($result_condition['sort']))  
        {  
            $cursor->sort($result_condition['sort']);  
        }  
        $result = array();  
        try {  
            while ($cursor->hasNext())  
            {  
                $result[] = $cursor->getNext();  
            }  
        }  
        catch (MongoConnectionException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }  
        catch (MongoCursorTimeoutException $e)  
        {  
            $this->error = $e->getMessage();  
            return false;  
        }  
        return $result;  
    }  
  
    /** 
    * 查找一条记录 
    * 
    * 参数: 
    * $table_name:表名 
    * $condition:查找条件 
    * $fields:获取字段 
    * 
    * 返回值: 
    * 成功:一条记录 
    * 失败:false 
    */  
    function findOne($table_name, $condition, $fields=array())  
    {  
        $dbname = $this->curr_db_name;  
        return $this->mongo->$dbname->$table_name->findOne($condition, $fields);  
    }  
  
    /** 
    * 获取当前错误信息 
    * 
    * 参数:无 
    * 
    * 返回值:当前错误信息 
    */  
    function getError()  
    {  
        return $this->error;  
    }  
}  
  
?>

 

分享到:
评论

相关推荐

    PHP7之Mongodb API使用详解

    7. **API参考**: 要了解更多关于MongoDB PHP驱动的信息,可以查阅以下资源: - 官方GitHub仓库:https://github.com/mongodb/mongo-php-driver - MongoDB官方网站:http://www.mongodb.org/ - PHP官方PECL包...

    php_mongodb-1.5.5-7.2-ts-vc15-x64.zip

    这很重要,因为不同的PHP版本可能有不兼容的API改动,而32位和64位系统之间也有差异,需要确保使用匹配的软件版本。 标签“php7”和“mongodb”进一步明确了这个扩展的主要功能和所关联的技术。php7指的是PHP 7编程...

    PHP中MongoDb应用类库

    MongoDB是一种分布式文档数据库,常用于处理海量数据和构建高性能、可扩展的现代应用程序。在PHP中,可以使用MongoDB PHP Library...请根据实际需求解压并参考这些样本文件,以便更好地理解和实践MongoDB与PHP的集成。

    PHP操作Mongodb封装类完整实例

    * Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口 * * @version 1.0 * [说明] * * 1:该版本API实现了 Mongodb 中最基本的插入/修改/查询/删除操作的封装 * 2:其它更高级的操作可通过 $this-&gt;...

    php操作mongodb封装类与用法实例

    本文实例讲述了php操作mongodb封装类与用法。分享给大家供大家参考,具体如下: 近来学习了mongodb,刚好是做php开发的,随便写了php操作mongodb的封装类. &lt;?php /** * Created by PhpStorm. * User: lee * ...

    The Definitive Guide to MongoDB

    书中还包含了使用MongoDB的PHP API来编写应用程序的教程,以及如何优化MongoDB的性能。除了基本操作,书中还涵盖了MongoDB的高级特性,如复制和分片(sharding)。 MongoDB之所以吸引人,是因为它提供了一种类似于...

    基于MongoDB的Eloquent模型和用于Laravel (Moloquent)的查询生成器

    这个包使用原始的Laravel API为MongoDB添加了Eloquent模型和Query构建器的功能。这个库扩展了原始的Laravel类,所以它使用完全相同的方法。 这个包被重命名为mongodb/ laravell -mongodb,因为所有权转移到mongodb,...

    mongodb-docs-2011-02-28.pdf

    从给定的文件信息来看,这是一份关于MongoDB的详尽文档,涵盖了从入门...通过以上分析,我们可以看出,这份文档是MongoDB开发者的重要参考资料,无论是初学者还是经验丰富的开发人员,都能从中获得有价值的信息和指导。

    PHP封装的简单连接MongoDB类示例

    MongoDB与PHP的集成提供了丰富的API,用于执行各种数据库操作,例如查询、更新和删除记录。这里仅展示了最基本的连接和插入操作。要了解更多操作,可以参考以下专题: - 《PHP+MongoDB数据库操作技巧大全》:提供...

    【PHP 知识图谱】(高清、超详细)

    此外,NoSQL数据库如MongoDB的集成也是现代Web开发中常见的需求,可能会涉及相关API的使用和数据模型设计。 这份知识图谱还可能涉及其他高级主题,如PHP的OOP(面向对象编程)、设计模式、性能优化、安全实践(如...

    个人导航主页API网站

    这个项目对于开发者来说,是一个很好的学习和参考资源,可以帮助他们理解如何将API接口融入到网页设计中,以及如何构建基本的后台系统来管理网站内容。 首先,让我们深入探讨一下API接口在网站中的应用。API...

    MyArena_Ru-API-源码.rar

    API通常需要与数据库进行交互,如MySQL、MongoDB等。关注源码中的数据库连接、查询和更新操作,了解数据模型和存储逻辑。 10. **测试与文档**: 一个完善的API项目会有配套的测试代码和清晰的文档,帮助开发者...

    slacklogs:使用Laravel和MongoDB构建PHP台湾社区松弛频道的记录器

    【标题解析】 "slacklogs"是一个项目...综上所述,"slacklogs"项目展示了如何使用现代Web开发技术和工具来解决特定社区的需求,为其他开发者提供了灵感和参考,同时也体现了PHP、Laravel和MongoDB在实际项目中的应用。

    PHP完全手册中文版

    这个“PHP完全手册中文版”提供了全面的PHP学习资源,涵盖了从基础概念到高级特性的所有内容,对于初学者和有一定经验的开发者来说都是宝贵的参考资料。 **一、PHP基础知识** 1. **安装与配置**:手册将指导读者...

    up_151180_SolrPhpClient_4432s9.rar

    "手头参考的例子程序代码"提示我们,压缩包中可能包括了用于演示如何使用PHP操作Solr和MongoDB的实例代码,这对于初学者或者开发者来说是非常宝贵的资源,可以帮助他们理解和学习这两个技术的API使用方法和最佳实践...

    全新UI八爷api云短视频程序运行源码

    通常会使用关系型数据库如MySQL或非关系型数据库如MongoDB,根据业务需求进行选择和设计。 四、后端 后端服务器主要负责处理前端的请求,与数据库交互,实现业务逻辑。可能使用的技术栈有Java、Python、Node.js等,...

    php实现服务器监控源代码

    7. **报警机制**:当服务器出现异常时,可以设置自动报警,如通过邮件、短信或API通知管理员。 通过以上分析,我们可以看出这个PHP服务器监控源代码提供了从数据采集、处理、存储到展示的一整套解决方案。对于想要...

    PHP实例开发源码—PHP开发云盘网盘系统源码全新一键安装版+快速对接多家云存储.zip

    - **数据库设计**:包括用户信息、文件元数据、访问记录等数据的存储,可能使用MySQL或更现代的数据库如MongoDB。 - **云存储API接口**:与各大云服务商的API交互,如使用阿里云OSS SDK进行对象存储操作。 - **...

    jaothc_SolrPhpClient_tasp4z.rar

    标题中的"jaothc_SolrPhpClient_tasp4z....这个资源对于想要深入学习PHP与数据库交互,尤其是Solr和MongoDB的开发者来说,是非常有价值的参考资料。通过学习和实践,可以提升在PHP环境中处理不同类型的数据库的能力。

    PHP实例开发源码—企管美图爬虫源码 php版.zip

    【PHP实例开发源码—企管美图爬虫源码 php版.zip】是一个包含PHP编程...总体来说,这个项目是一个完整的PHP爬虫实例,它涵盖了从网络请求、HTML解析到数据存储的全过程,对于学习和实践PHP爬虫技术具有很高的参考价值。

Global site tag (gtag.js) - Google Analytics