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'] )
)
);
}
}
mongodb基类封装实例的更多相关文章
- 四、spring集成ibatis进行项目中dao层基类封装
Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库 ...
- salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※
我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...
- Android 开发技巧 - Android 6.0 以上权限大坑和权限检查基类封装
简单介绍 关于运行时权限的说法,早在Google发布android 6.0的时候,大家也听得蛮多的.从用户的角度来讲,用户是受益方,更好的保护用户的意思,而对于开发者来说,无疑增加了工作量. 对于6. ...
- thinkphp5底层基类封装、内部类函数
记录下thinkphp5自定义底层基类.内部类函数使用笔记 大部分笔记来自tp手册. 底层常用代码的封装 在控制器中基类的起着至关重要的作用,整个项目的代码安全,复杂程度,易读性都要看你项目的基类架构 ...
- python 打飞机项目 ( 基类封装 )
项目代码 | plane # -*- coding:utf-8 -*- import pygame, time from Plane import Plane from HeroPlane impor ...
- C#中将xml文件反序列化为实例时采用基类还是派生类的问题
基类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- python(五):面向对象--类和实例
一.类的基本概念 类是用来创建数据结构和新类型对象的主要机制.一个类定义了一系列与其实例对象密切关联的属性.典型的属性包括变量(也被称为 类变量)和函数(又被称为方法). 1.class上下文 cla ...
- JAVA单例MongoDB工具类
我经常对MongoDB进行一些基础操作,将这些常用操作合并到一个工具类中,方便自己开发使用. 没用Spring Data.Morphia等框架是为了减少学习.维护成本,另外自己直接JDBC方式的话可以 ...
- C#在派生类中调用基类成员
一.在派生类中调用基类成员 在C#的派生类中,我们可以使用base关键字调用基类中的公有或者受保护成员.这些成员只能是构造函数.实例方法或者实例属性. base关键字调用基类成员的语法格式如下: ba ...
随机推荐
- Ubuntu 使用 Android Studio 编译 TensorFlow android demo
https://www.cnblogs.com/dyufei/p/8028218.html https://www.myboxlab.com/topic/detail/714ca2d405414f13 ...
- 第25月第11天 deeplearning.ai
1.网易云课堂 深度学习工程师 点击进入课程地址(英文)(收费) 点击进入课程地址(中文)(免费) 第一门 神经网络和深度学习 第二门 改善神经网络 第三门 结构化机器学习项目 第四门 卷积神经网络 ...
- objectMapper、JsonNode、JsonObject常用方法
一.objectMapper https://blog.csdn.net/han1196639488/article/details/79358743 二.JsonNode.JsonObject常用方 ...
- 1 Java中的时间类型
总结:sql中的时间转 util的时间直接赋值即可:反过来,必须先吧util下的时间转换成毫秒,再通过sql的构造器生成sql的时间格式. 1 Java中的时间类型 java.sql包下给出三个与数据 ...
- Eclipse同时显示两个编辑窗口
同时打开两个编辑窗口,点住一个窗口,拖到编辑窗口的最下面时或者最右面,会出现两个两个编辑窗口的轮廓,松开即可!
- 用Vue实现状态列表的操作涵盖所有的知识点
用Vue实现状态列表的操作涵盖所有的知识点
- [Docker]CentOS7通过rpm包安装Docker
前几天写过一篇文章:[Docker]CentOS7下Docker安装教程,直接使用yum命令下载Docker即可.但是前提是你需要***,所以这篇文章来讲讲,如果不会***,该如何安装Docker. ...
- sublime修改侧边栏字体
安装了sublime的material主题后,侧边栏的字体特别小,设置方法如下: 安装插件 用上面的插件打开 Material-Theme.sublime-theme 如下 { "class ...
- python3+selenium入门14-上传下载文件
上传文件一种方式是通过定位input标签,然后使用send_keys()方法传入需要上传文件的路径.另一种是使用第三方插件去上传文件.下面看下imput标签的方式.工具可以自己查下. <!DOC ...
- Android应用内嵌unity3d游戏项目
在一个现有的Android项目中嵌入unity3d项目 1.将unity3d项目导出android工程 2.将第一步导出的Android工程中assets文件夹和libs文件夹下的所有内容复制到And ...