工作中使用mongodb

写了一个mongodb的基类

  1 <?php
  2
  3 namespace BI\Service\MongoDB;
  4
  5 use MongoDB\Driver\BulkWrite;
  6 use MongoDB\Driver\Exception\Exception;
  7 use MongoDB\Driver\Manager;
  8 use MongoDB\Driver\Query;
  9 use MongoDB\Driver\WriteConcern;
 10 use MongoDB\Driver\WriteResult;
 11 use MongoException;
 12
 13 class MongoDBManager
 14 {
 15     private $mongoManager;
 16     private $db;
 17
 18     function __construct($mongoDBConfig)
 19     {
 20         $connectString = ‘mongodb://‘;
 21         if($mongoDBConfig[‘user‘] && $mongoDBConfig[‘pass‘])
 22             $connectString .= $mongoDBConfig[‘user‘] . ‘:‘ . $mongoDBConfig[‘pass‘] . ‘@‘;
 23         $connectString .= $mongoDBConfig[‘host‘] . ‘:‘ . $mongoDBConfig[‘port‘] . ‘/‘ . $mongoDBConfig[‘db‘];
 24         $this->mongoManager = new Manager($connectString);
 25         $this->db = $mongoDBConfig[‘db‘];
 26     }
 27
 28
 29     /**
 30      * @param string $collection
 31      * @param array $filter
 32      * @param array $options
 33      * @return array
 34      */
 35     public function executeQuery($collection, $filter = array(), $options = array()){
 36         $query = new Query($filter, $options);
 37         return $this->mongoManager->executeQuery($this->db . ‘.‘ . $collection, $query)->toArray();
 38     }
 39
 40     /**
 41      * @param string $collection
 42      * @param BulkWrite $bulkWrite
 43      * @return WriteResult
 44      */
 45     public function executeBulkWrite($collection, $bulkWrite){
 46         return $this->mongoManager->executeBulkWrite($this->db . ‘.‘ . $collection, $bulkWrite);
 47     }
 48
 49     /**
 50      * @param $doc
 51      * @param string $collection
 52      * @param bool $fetched
 53      * @return WriteResult
 54      */
 55     public function insertData($doc, $collection, $fetched = FALSE) {
 56         // do checking
 57         if (empty($doc) || $collection === NULL) {
 58             return false;
 59         }
 60
 61         // save data information
 62         try {
 63             //$wc = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY);
 64
 65             $bulk = new BulkWrite();
 66             $insertedId = $bulk->insert($doc);
 67             $this->mongoManager->executeBulkWrite($this->db . ‘.‘ . $collection, $bulk);
 68
 69             //throw new MongoException(‘insert data failed‘);
 70
 71             if ($fetched) { return $insertedId; }
 72         }
 73         catch (Exception $e) {
 74             $this->throwError($e->getMessage());
 75         }
 76     }
 77
 78     /**
 79      * Update records
 80      * @param $collection
 81      * @param $filter
 82      * @param $updated
 83      * @param $options
 84      * @return WriteResult
 85      */
 86     public function updateData($collection, $filter, $updated, $options = array()) {
 87         // do checking
 88         if ($collection === NULL || empty($updated) || empty($filter)) {
 89             $this->throwError(‘Updated data can not be empty!‘);
 90         }
 91
 92         // do updating
 93         $timeout = 3000;
 94         $wc = new WriteConcern(WriteConcern::MAJORITY, $timeout);
 95         $bulk = new BulkWrite();
 96         $bulk->update($filter, $updated, $options);
 97         try {
 98             // execute
 99             return $this->mongoManager->executeBulkWrite("{$this->db}.$collection", $bulk, $wc);
100
101             // throw new MongoException(‘find record failed‘);
102         }
103         catch (\MongoException $e) {
104             $this->throwError($e->getMessage());
105         }
106     }
107
108     /**
109      * Delete record
110      * @param $collection
111      * @param $filter
112      * @param $options
113      * @return number of rows affected
114      */
115     public function deleteData($collection, $filter, $options=array()) {
116         // do checking
117         if ($collection === NULL) {
118             $this->throwError(‘Inserted data can not be empty!‘);
119         }
120
121         if (!is_array($filter)) {
122             $this->throwError(‘$filter format is invaild.‘);
123         }
124
125         try {
126             // execute
127             $bulk = new BulkWrite();
128             $bulk->delete($filter, $options);
129             $WriteResult = $this->mongoManager->executeBulkWrite("{$this->db}.$collection", $bulk);
130             return $WriteResult->getDeletedCount();
131
132             // throw new MongoException(‘delete record failed‘);
133         }
134         catch (MongoException $e) {
135             $this->throwError($e->getMessage());
136         }
137     }
138
139     /**
140      * throw error message
141      * @param string $errorInfo error message
142      */
143     private function throwError($errorInfo=‘‘) {
144         echo "<h3>Error:$errorInfo</h3>";
145     }
146 }

增删改查

class AlarmController
{
    CONST TIP = ‘tip‘;//我习惯,mongodb里面的key写成常量
    public function checkTipAlarm()
    {
        $mongo = new MongoDBManager()

        //查询
        $result = $mongo->executeQuery(
            self::TIP,
            array(
                ‘_id‘ => new ObjectID( $this->request[‘rid‘] )
            )
        );

        //新增
        $document = array(
            "msg" => $this->request[‘msg‘],
            "owner" => $this->uuid,
            "to" => $this->request[‘to‘],
            ‘type‘ => $this->request[‘type‘],
            ‘flag‘ => self::FLAG_UNREAD,
            "inserted" => $function->millStampTime(),
            "status" => 1,
        );
        $result = $mongo->insertData($document, self::TIP, true);

        //更新
        $result = $mongo->updateData(
            self::TIP,
            array(
                ‘_id‘ => new ObjectID( $this->request[‘rid‘] )
            ),
            array(‘$set‘ => array(‘status‘ => 0))
        );

        //删除
        $result = $mongo->deleteData(
            self::TIP,
            array(
                ‘_id‘ => new ObjectID( $this->request[‘rid‘] )
            )
        );
    }
}
时间: 2024-11-09 00:32:57

工作中使用mongodb的相关文章

程序员工作中会遭遇的天花板 工作中不由你控制的一些地方(转)

在我看来,程序员做的是开创性的工作.互联网的发展不但推动了技术的发展,而且带来了技术的普及.因此程序员不比以前,现在要找某方面的资料是很easy的事情了.看过大量的资料,各种新颖的技术方案和解决思路,不心动那是不可能的.OK,想用某某某框架,想用某某某技术,但是,因为各种原因,没办法应用到自己开发的项目中.这就是一个天花板. 在工作中往往有各种各样的天花板,比如绩效考核,项目进度,被打断的思路,技术架构.因为你不是做决定的那个人,所以你就有天花板. 绩效考核 很多公司都有绩效考核,在我看来绩效考

总结工作中经常性用到的命令和参数

1.Tomcat参数解决乱码的问题 加入一下代码并如图: useBodyEncodingForURI="true" URIEncoding="UTF-8" 2.Tomcat内存溢出 加入一下行代码: 我比较喜欢加到catalina.out JAVA_OPTS="-server -Xms256m -Xmx2048m-XX:PermSize=64M -XX:MaxPermSize=512m" 3.部署分布式mongodb集群遇到的问题:暂时还没有解决

工作中的程序员如何进阶

前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发) 建议: 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用. 回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样. 一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节. 一定要学会思考,思考为什么要这样,

工作中使用到的技术和工具分享

已经很长时间没有写博客,7月份走出校门距离现在也有4个月了,没出校门之前以为自己懂得很多,真正工作了才发现自己学的东西真的已经落伍和过时了,在这里分享这四个月学习到的或者收藏的一些工作中需要使用的技术和工具,希望对还没走出校门的你们或者急需提升自己技术能力的伙伴有些许的帮助. 一.实用工具介绍 1)FQ工具:一只猫 | Jump Out Google是最好的老师,你遇到的问题和困难前人肯定都遇到过,技术资料不建议百度 2)抓包工具:Fiddler:Fiddler 抓包工具总结.charles 工

[工作中的设计模式]享元模式模式FlyWeight

一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. 享元模式:主要为了在创建对象时,对共有对象以缓存的方式进行保存,对外部对象进行单独创建 模式要点: 1.享元模式中的对象分为两部分:共性部分和个性化部分,共性部分就是每个对象都一致的或者多个对象可以共享的部分,个性化部分指差异比较大,每个类均不同的部分 2.共性部分的抽象就是此模

openstack运维手册(个人实际工作中整理)

openstack运维手册,是本人在实际工作中整理的,现分享!!!因水平有限,欢迎广大朋友指正.具体文档见附件.

软件测试工程师工作中常用的Linux命令

Linux系统有着众多的优点,比方开源.非商业版本免费.多任务多用户操作,因而Linux系统在非桌面范畴占有压倒性的市场份额.关于互联网技术工作者来说,控制常用的Linux命令也是一门必修课.下面罗列一些笔者在工作中常用的Linux命令. cd 切换目录 cd .. 返回上一层目录 cd . 进入当前目录 cd - 返回前一次的目录,即上一次的目录不是上一层目录 ls 查看文件与目录 用法: ls [参数][文件] 参数: ls –l 显示文件的权限和属性 ls –a 列出所有的文件,包含隐藏文

[工作中的设计模式]解释器模式模式Interpreter

一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我很少附上类图,但解释器模式确实比较抽象,为了便于理解还是放了上来,此模式的要点是: 1.客户端提供一个文本.表达式或者其他,约定解析格式 2.针对文本中可以分为终结符表达式和非终结符表达式, 3.终结符表达式无需进一步解析,但仍需要转化为抽象接口的实例 4.针对非终结表达式,没一种标示需要定义一种解

[工作中的设计模式]策略模式stategy

一.模式解析 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式的关键点为: 1.多种算法存在 2.算法继承同样的接口,执行同样的行为,为可以替代的 3.算法调用者唯一,算法调用者可以灵活改变自己需要调用的算法,从而实现计算. 二.模式代码 算法接口: /** * 算法统一接口,所有算法继承此接口 * @author zjl * @time 2016-1-24 * */ public interface IStra