日期:2014-05-16  浏览次数:20454 次

MongoDB快速上手PHP篇(转)

包含了 增删改查操作  
<?php
/**
 * PHP操作MongoDB学习笔记
 * 2011年2月23日
 * 原作者:xiaocai
 */

//*************************
//**    连接MongoDB数据库服务器
//*************************

//格式=>("mongodb://用户名:密码@地址:端口/默认指定数据库",参数)
$conn = new Mongo();
//可以简写为
//$conn=new Mongo();                                            #连接本地主机,默认端口.
//$conn=new Mongo("172.21.15.69");                              #连接远程主机
//$conn=new Mongo("xiaocai.loc:10086");                         #连接指定端口远程主机
//$conn=new Mongo("xiaocai.loc",array("replicaSet"=>true));     #负载均衡
//$conn=new Mongo("xiaocai.loc",array("persist"=>"t"));         #持久连接
//$conn=new Mongo("mongodb://sa:123@localhost");                #带用户名密码
//$conn=new Mongo("mongodb://localhost:27017,localhost:27018"); #连接多个服务器
//$conn=new Mongo("mongodb:///tmp/mongo-27017.sock");           #域套接字
//$conn=new Mongo("mongodb://admin_miss:miss@localhost:27017/test",array('persist'=>'p',"replicaSet"=>true));   #完整
//详细资料:http://www.php.net/manual/en/mongo.connecting.php




//*************************
//**    选择数据库与表       
//*************************

$db=$conn->mydb;                                #选择mydb数据库
//$db=$conn->selectDB("mydb");                  #第二种写法

$collection=$db->column;                        #选择集合(选择'表')
//$collection=$db->selectCollection('column');  #第二种写法
//$collection=$conn->mydb->column;              #更简洁的写法

//注意:
// 1.数据库和集合不需要事先创建,若它们不存在则会自动创建它们.
// 2.注意错别字,你可能会无意间的创建一个新的数据库(与原先的数据库混乱).



    
//*************************
//**    插入文档         
//*************************

//**向集合中插入数据,返回bool判断是否插入成功. **/
$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai');
$result=$collection->insert($array);        #简单插入
echo "新记录ID:".$array['_id'];              #MongoDB会返回一个记录标识
var_dump($result);                          #返回:bool(true) 
#插入结果:{ "_id" : ObjectId("4d63552ad549a02c01000009"), "column_name" : "col770", "column_exp" : "xiaocai" }
#'_id'为主键字段,在插入是MongoDB自动添加.

//**向集合中安全插入数据,返回插入状态(数组). **/
$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai2');
$result=$collection->insert($array,true);   #用于等待MongoDB完成操作,以便确定是否成功.(当有大量记录插入时使用该参数会比较有用)
echo "新记录ID:".$array['_id'];              #MongoDB会返回一个记录标识
var_dump($result);                          #返回:array(3) { ["err"]=> NULL ["n"]=> int(0) ["ok"]=> float(1) }
    
//**插入的完整语法 **/
# insert(array $data,array('safe'=>false,'fsync'=>false,'timeout'=>10000))
# 参数说明:safe:默认false,是否安全写入;fsync:默认false,是否强制插入到同步到磁盘;timeout:超时时间(毫秒)

//**以下两次插入的为同一条记录(相同的_id),因为它们的值相同**/
$collection->insert(array('column_name'=>'xiaocai'));
$collection->insert(array('column_name'=>'xiaocai'));
#避免方法,安全插入
$collection->insert(array('column_name'=>'xiaocai'),true);
 try {
     $collection->insert(array('column_name'=>'xiaocai'),true);
}catch(MongoCursorException $e){
    echo "Can't save the same person twice!\n";
}
//详细资料:http://www.php.net/manual/zh/mongocollection.insert.php



    
//*************************
//**    更新文档            
//*************************

//** 修改更新 **/
$where=array('column_name'=>'col123');
$newdata=array('column_exp'=>'GGGGGGG','column_fid'=>444);
$result=$collection->update($where,array('$set'=>$newdata));  #$set:让某节点等于给定值
/* 
 * 原数据
 * {"_id":ObjectId("4d635ba2d549a02801000003"),"column_name":"col123","column_exp":"xiaocai"}
 * 被替换成了
 * {"_id":ObjectId("4d635ba2d549a02801000003"),"column_name":"col123","column_exp":"GGGGGGG","column_fid":444}
 */

//** 替换更新 **/
$where=array('column_name'=>'col709');
$newdata=array('column_exp'=>'HHHHHHHHH','column_fid'=>123);
$result=$collection->update($where,$newdata);
/* 
 * 原数据
 * {"_id":ObjectId("4d635ba2d549a02801000003"),"column_name":"col709","column_exp":"xiaocai"}
 * 被替换成了
 * {"_id":ObjectId("4d635ba2d549a02801000003"),"column_exp":"HHHHHHHHH","column_fid"