class NewMongodb {
private $mongo; //NewMongodb连接
private $curr_db_name;
private $curr_table_name;
private $error;
public $config;
public function getInstance($mongo_server, $flag=array())
{
static $NewMongodb_arr;
if (empty($flag['tag']))
{
$flag['tag'] = 'default'; }
if (isset($flag['force']) && $flag['force'] == true)
{
$mongo = new NewMongodb($mongo_server);
if (empty($NewMongodb_arr[$flag['tag']]))
{
$NewMongodb_arr[$flag['tag']] = $mongo;
}
return $mongo;
}
else if (isset($NewMongodb_arr[$flag['tag']]) && is_resource($NewMongodb_arr[$flag['tag']]))
{
return $NewMongodb_arr[$flag['tag']];
}
else
{
$mongo = new NewMongodb($mongo_server);
$NewMongodb_arr[$flag['tag']] = $mongo;
return $mongo;
}
}
/**
* Constructor
* Supports passing in multiple mongo_servers (1. Connect to other servers when one has a problem 2. Automatically distribute queries evenly to different servers)
*
* Parameters:
* $mongo_server: Array or string - array("127.0.0.1:1111", "127.0.0.1:2222")-"127.0.0.1:1111"
* $connect: Whether to connect when initializing the mongo object, the default connection
* $auto_balance: Whether to automatically do load balancing , the default is
*
* Return value:
* Success: mongo object
* Failure: false
*/
public function __construct($mongo_server, $c $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 {
$this->mongo = new MongoClient($mongo_server, array('connect'=>$connect));
}
catch (MongoConnectionException $e)
{
$this->error = $e->getMessage();
return false;
}
}
/**
* Connect to NewMongodb server
*
* Parameters: None
*
* Return value:
* Success: true
* Failure: false
*/
public function connect()
{
try {
$this->mongo->connect();
return true;
}
catch (MongoConnectionException **
* select db
*
* Parameter: $dbname
*
* Return value: None
*/
public function selectDb($dbname )
{t $ this- & gt; curr_db_name = $ dbname;
}
/**
*Creating index: If the index exists, return.
*
* Parameters:
* $table_name: table name
* $index: Index-array("id"=>1) - Create an ascending index on the id field
* $index_param: Other conditions - whether it is a unique index, etc.
*
* Return value:
* Success: true
* Failure: false
*/
public function ensureIndex($table_name, $index, $index_param=array())
{
$dbname = $this->curr_db_name;
using $index_param['safe'] }
catch (MongoCursorException $e)
$this->error = $ insert($table_name, $record)
$record) >true));
return true; return false;
} }
}
/**
* Insert record
*
* Parameters:
* $table_name: table name
* $record: record
*
* Return value:
* Success: true
* Failure: false
*/
Public function count($table_name)
{
$dbname = $this->curr_db_name;
Return $this->mongo->$dbname->$table_name->count() ;
}
/**
* * The number of records in the query table
* *
* Parameters:
* $table_name: table name
*
* Return value: The number of records in the table
*/
public function update($table_name, $condition, $newdata, $opti> {
} $dbname = $this->curr_db_name;
$options['safe'] = 1;
;$dbname->$ table_name->update ($condition, $newdata, $options); );
return false;
} }
}
/*** Delete record
*/
public function remove($table_name, $condition, $opti> {
$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;
} }
/**
* Search for records
*
* Parameters:
* $table_name: table name
* $query_condition: field search conditions
* $result_condition: query result restriction conditions - limit/sort, etc.
* $fields: Get fields
*
* Return value:
* Success: record set
* Failure: false
*/
public function find($table_name, $query_condition, $result_c $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;
}
/**
* Find a record
*
* Parameters:
* $table_name: table name
* $condition: search condition
* $fields: get fields
*
* Return value:
* Success: one record
* Failure: false
*/
public function findOne($table_name, $condition, $fields=array())
{
$dbname = $this->curr_db_name;
return $this->mongo->$dbname->$table_name->findOne($condition, $fields);
}
/**
* Get the current error message
*
* Parameters: None
*
* Return value: Current error message
*/
public function getError()
{
return $this->error;
}
/*** NewMongodb class** examples:
* $mongo = new NewMongodb("127.0.0.1:11223");
* $mongo->selectDb("test_db");
* Create index
* $mongo->ensureIndex ("test_table", array("id"=>1), array('unique'=>true));
* Get the records of the table
* $mongo->count("test_table");
* Insert record
* $mongo->insert("test_table", array("id"=>2, "title"=>"asdqw"));
* Update record
* $mongo->update( "test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"));
* Update record - update if it exists, add if it does not exist -Equivalent to set
* $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"),array ("upsert"=>1));
* Find records
* $mongo->find("c", array("title"=>"asdqw"), array("start"=>2 ,"limit"=>2,"sort"=>array("id"=>1)))
* Find a record
* $mongo->findOne("$mongo->findOne(" ttt", array("id"=>1))", array("id"=>1));
* Delete record
* $mongo->remove("ttt", array("title" =>"bbb"));
* Delete only one record
* $mongo->remove("ttt", array("title"=>"bbb"), array("justOne"=>1 ));
* Get the error information of Mongo operation
* $mongo->getError();
*/
}
The above introduces the mongodb PHP operation class with a few simple examples, including aspects of the content. I hope it will be helpful to friends who are interested in PHP tutorials.