mongodb数据库简单类
<?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 {
private $mongo; //Mongodb连接
private $curr_db_name;
private $curr_table_name;
private $error;
public function getInstance($mongo_server, $flag=array())
{
static $mongodb_arr;
if (empty($flag['tag']))
{
$flag['tag'] = 'default'; }
if (isset($flag['force']) && $flag['force'] == true)
{
$mongo = new HMongodb($mongo_server);
if (empty($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;
}
}
/**
* 构造函数
* 支持传入多个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
*/
public 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 {
if($mongo_server){
$this->mongo = new Mongo($mongo_server, array('connect'=>$connect));
}else{
$this->mongo = new Mongo();
}
}
catch (MongoConnectionException $e)
{
$this->error = $e->getMessage();
return false;
}
}
/**
* 连接mongodb server
*
* 参数:无
*
* 返回值:
* 成功:true
* 失败:false
*/
public function connect()
{
try {
$this->mongo->connect();
return true;
}
catch (MongoConnectionException $e)
{
$this->error = $e->getMessage();
return false;
}
}
/**
* select db
*
* 参数:$dbname
*
* 返回值:无
*/
public function selectDb($dbname)
{
$this->curr_db_name = $dbname;
}
/**
* 创建索引:如索引已存在,则返回。
*
* 参数:
* $table_name:表名
* $index:索引-array("id"=>1)-在id字段建立升序索引
* $index_param:其它条件-是否唯一索引等
*
* 返回值:
* 成功:true
* 失败:false
*/
public 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
*/
public 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:表名
*
* 返回值:表的记录数
*/
public 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
*/
public 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,array('$set'=> $newdata), $options);
return true;
}
catch (MongoCursorException $e)
{
$this->error = $e->getMessage();
return false;
}
}
/**
* 删除记录
*
* 参数:
* $table_name:表名
* $condition:删除条件
* $options:删除选择-justOne
*
* 返回值:
* 成功:true
* 失败:false
*/
public 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
*/
public 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 (!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 (MongoConnectionException $e)
{
$this->error = $e->getMessage();
return false;
}
catch (MongoCursorTimeoutException $e)
{
$this->error = $e->getMessage();
return false;
}
return $result;
}
/**
* 查找一条记录
*
* 参数:
* $table_name:表名
* $condition:查找条件
* $fields:获取字段
*
* 返回值:
* 成功:一条记录
* 失败:false
*/
public function findOne($table_name, $condition, $fields=array())
{
$dbname = $this->curr_db_name;
return $this->mongo->$dbname->$table_name->findOne($condition, $fields);
}
/**
* 获取当前错误信息
*
* 参数:无
*
* 返回值:当前错误信息
*/
public function getError()
{
return $this->error;
}
/*** 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();
*/
}
mongodb数据库简单类的更多相关文章
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- <day001>存储到Mysql、mongoDB数据库+简单的Ajax请求+os模块+进程池+MD5
任务1:记住如何存储到Mysql.mongoDB数据库 ''' 存储到Mysql ''' import pymysql.cursors class QuotePipeline(object): def ...
- android开发学习 ------- MongoDB数据库简单理解
首先说一下MongoDB是什么? MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB 是一个基于分布式文件存储的数据库. N ...
- 在IDEA中用三个jar包链接MongoDB数据库——实现增删改查
安装Robo 3T连接MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/98845789 使用Robo 3T操作Mon ...
- C# Asp.net中简单操作MongoDB数据库(二)
C# Asp.net中简单操作MongoDB数据库(一) , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...
- C# Asp.net中简单操作MongoDB数据库(一)
需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...
- PHP使用MongoDB类操作MongoDB数据库总结
参考:https://www.php.net/manual/zh/class.mongodb-driver-manager.php 参考:https://www.zhaokeli.com/articl ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
- DataAccess通用数据库访问类,简单易用,功能强悍
以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...
随机推荐
- 深度解析HashMap集合底层原理
目录 前置知识 ==和equals的区别 为什么要重写equals和HashCode 时间复杂度 (不带符号右移) >>> ^异或运算 &(与运算) 位移操作:1<&l ...
- Less-5闯关失败
进行第五关的通关还是用之前的方式进行测试以及判断是什么类型的注入.通过判断我们不难发现是字符型注入.但是出了问题,我们会发现按照原来的步骤进行注入都会返回"You are in " ...
- Vue:Vue的介绍以及组件剖析
介绍 现在,随着基于JavaScript的单页应用程序(SPA)和服务器端渲染(SSR)的兴起,可以用JavaScript编写整个前端应用程序,并整洁地管理和维护该应用程序的前端代码.诸如Angula ...
- Qt信号与槽传递自定义数据类型——两种解决方法
信号与槽作为qt中的核心机制,在qt应用开发中经常会用的,但是原生的信号与槽连接传参,只支持基本的数据类型,比如char,int, float,double. 如果想要在信号与槽之间传递自定义参数,比 ...
- 前端面试手写代码——模拟实现new运算符
目录 1 new 运算符简介 2 new 究竟干了什么事 3 模拟实现 new 运算符 4 补充 预备知识: 了解原型和原型链 了解this绑定 1 new 运算符简介 MDN文档:new 运算符创建 ...
- 直播预告|App 首页如何动态化更新?来看蚂蚁技术专家详解「支付宝」全新卡片技术栈
立即前往直播间预约观看 从icon到card,一场内容前置化的变革 从 Windows 时代开始,应用程序图标就成为了用户(流量)的主入口,一直持续到移动端时代. 图标即入口的方式,虽然足够方便但却不 ...
- IDM使用教程:利用IDM下载百度网盘文件
IDM是什么 其实我使用IDM下载器只是为了方便网页版百度网盘直接下载大于40M文件而已,大家知道文件过大必须打开客户端才能下载,这点对于我的破电脑感觉很烦躁,每次要等待它慢悠悠打开,然后动用我的超级 ...
- KMP算法-字符匹配
字符匹配模式-KMP算法 j直接跳到了2的位置,因为在之前的都相同. 那么就需要求如果不等了之后,j需要回跳的位置next[j] 如果tk'与tj相等,则next [j+1]=k'+1 如果tk'与t ...
- 计算机网络漫谈之IP与子网掩码
通过之前的介绍,我们现在已有的概念是任何一台计算机如果需要接入互联网,都会分配到一个IP地址.这个地址分成两个部分,前一部分代表网络,后一部分代表主机.比如,IP地址172.16.254.1,这是一个 ...
- 热门剧本杀与 SaaS 的不解之缘
近年来,"剧本杀"这种以剧本为核心,玩家分别扮演不同角色推理案情找出真凶的娱乐项目在年轻人的范围内迅速传开,已悄然形成了一个市场规模超百亿的新兴产业,吸引了大量淘金者.而在互联网时 ...