写了一个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'] )
)
);
}
}

工作中使用mongodb的更多相关文章

  1. Spring Boot中的Mongodb多数据源扩展

    在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可. 然后 ...

  2. C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑

    C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...

  3. 随机记录工作中常见的sql用法错误(一)

    没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的. 网上很多类似动软生成器的小工具,这类工具虽然在表关系复杂的时候没什么软用,但是在一些简单的表结构关系还是很方 ...

  4. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  5. 工作中那些提高你效率的神器(第二篇)_Listary

    引言 无论是工作还是科研,我们都希望工作既快又好,然而大多数时候却迷失在繁杂的重复劳动中,久久无法摆脱繁杂的事情. 你是不是曾有这样一种想法:如果我有哆啦A梦的口袋,只要拿出神奇道具就可解当下棘手的问 ...

  6. 工作中那些提高你效率的神器(第一篇)_Everything

    引言 无论是工作还是科研,我们都希望工作既快又好,然而大多数时候却迷失在繁杂的重复劳动中,久久无法摆脱繁杂的事情. 你是不是曾有这样一种想法:如果我有哆啦A梦的口袋,只要拿出神奇道具就可解当下棘手的问 ...

  7. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义

    Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...

  8. C# 工作中遇到的几个问题

    C#  工作中遇到的几个问题 1.将VS2010中的代码编辑器的默认字体“新宋体”改为“微软雅黑”后,代码的注释,很难对齐,特别是用SandCastle Help File Builder生成帮助文档 ...

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

    一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我 ...

随机推荐

  1. Lombda表达式(五)

    public class Test05 { /* * lambda表达式是用来简化匿名内部类的一种函数式编程的语法. * 只有SAM接口才能使用lambda表达式 * 方法引用和构造器引用是用来简化l ...

  2. ubuntu18 ssh服务器拒绝连了密码

    问题 xshell 远程连接ubuntu时 解决方法 参考:链接 网上的kenghuo太多!!! 1.如果没有安装ssh服务,请先安装 sudo apt-get install openssh-ser ...

  3. java 文件和byte 互转

    /** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...

  4. ffmpeg 部分api delphi 版

    ffmpeg 是一套强大的开源的多媒体库  一般都是用 c/c++ 调用, 抽空研究了一下该库的最新版 ,把部分api 翻译成了dephi版的 记录一下 地址   ffmpegvcl.zip

  5. Python ( 高级 第二部)

    目录 模块和包 面向对象 部分一: 面向对象程序开发 面向对象封装: 对象的相关操作 面向对象封装: 类的相关操作 实例化的对象/ 定义的类删除公有成员属性和公有成员方法 部分二: 单继承 多继承 菱 ...

  6. sqlsugar入门(1)-初识sugar正确打开sugar的方式

    1.实例化DB public static SqlSugarClient GetDB(string s) { var ssc = new SqlSugarClient(new ConnectionCo ...

  7. 监控制图OxyPlot组件的下载与安装

    1.在工具(T)-NuGet包管理器(N)-管理解决方案的NuGet程序包(N),打开组件管理界面 2.切换到浏览窗口,安装以下三个窗口组件即可 3.OxyPlot文档手册 https://oxypl ...

  8. 安装Mysql,开发权限,以及复制数据库

    官网下载 https://downloads.mysql.com/archives/community/     解压后安装,管理员身份打开cmd,转到mysql的bin目录,mysqld --ins ...

  9. 技术总监的故事告诉大家,要学会say【NO!】

    今天就给大家分享一个发生在我自己身上的事情吧. 1 2015年的时候,我和我的领导A,还有几个小伙伴正在做一个"紧急定制",这个任务是公司老大CEO和重要客户定下来的一个项目,背后 ...

  10. 9.集合set和frozenset冻结集合函数

    集合set set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以在set中没有重复的key. 集合中的元素要求是不可变的并且还是唯一的,我们就利用它是唯一来做去重. ...