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 ...
随机推荐
- 大厂面试题系列:重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分
面试题:重载(Overload)和重写(Override)的区别.重载的方法能否根据返回类型进行区分 面试官考察点猜想 这道题纯粹只是考查基础理论知识,对实际开发工作中没有太多的指导意义,毕竟编辑器都 ...
- Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭
T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前 ...
- $dy$讲课总结
字符串: 1.广义后缀自动机(大小为\(m\))上跑一个长度为\(n\)的串,所有匹配位置及在\(parent\)树上其祖先的数量的和为\(min(n^2,m)\),单次最劣是\(O(m)\). 但是 ...
- 开关电源(DC-DC)与LDO电源的区别---纹波
https://blog.csdn.net/edadoc2013/article/details/78435775
- 零基础入门该如何实现C 语言面向对象编程(很有帮助)
零基础如果更快更好的入门C语言,如何在枯燥的学习中找到属于自己的兴趣,如果把学习当成一种事务性的那以后的学习将会很难有更深入的进步,如果带着乐趣来完成学习那将越学越有意思这样才会让你有想要更深入学习的 ...
- Ubuntu用apt安装MySQL
这里以MySQL5.7为例. # 如果之前有安装旧版,先移除sudo apt-get --purge remove mysql-server mysql-client mysql-common # 安 ...
- 密码学基础:AES加密算法
[原创]密码学基础:AES加密算法-密码应用-看雪论坛-安全社区|安全招聘|bbs.pediy.com 目录 基础部分概述: 第一节:AES算法简介 第二节:AES算法相关数学知识 素域简介 扩展域简 ...
- sql server 如何跟更新拼接的数据(cast用法)
我们在实际中会做如下图的连接 执行以后这个连接就会报错了,如下图所示 然后我们用cast将数字转换为字符串在连接,如下图所示 这次连接的结果就没问题了,如下图所示 最后如果两个数字 ...
- 深入剖析Redis客户端Jedis的特性和原理
一.开篇 Redis作为目前通用的缓存选型,因其高性能而倍受欢迎.Redis的2.x版本仅支持单机模式,从3.0版本开始引入集群模式. Redis的Java生态的客户端当中包含Jedis.Rediss ...
- Language Server for Java™ 1.0 在VS Code上正式发布!
Nick Zhu form Senior Program Manager, Developer Division at Microsoft 今天,我们很高兴与大家宣布:Language Server ...