class
NewMongodb {
private
$mongo
;
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
;
}
}
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
{
$this
->mongo =
new
MongoClient(
$mongo_server
,
array
('connect'=>
$connect
));
}
catch
(MongoConnectionException
$e
)
{
$this
->error =
$e
->getMessage();
return
false;
}
}
public
function
connect()
{
try
{
$this
->mongo->connect();
return
true;
}
catch
(MongoConnectionException
$e
)
{
$this
->error =
$e
->getMessage();
return
false;
}
}
public
function
selectDb(
$dbname
)
{
$this
->curr_db_name =
$dbname
;
}
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;
}
}
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;
}
}
public
function
count
(
$table_name
)
{
$dbname
=
$this
->curr_db_name;
return
$this
->mongo->
$dbname
->
$table_name
->
count
();
}
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
,
$newdata
,
$options
);
return
true;
}
catch
(MongoCursorException
$e
)
{
$this
->error =
$e
->getMessage();
return
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;
} }
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
;
}
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;
}
}