Document
首页 php操作mongo进行增删改查

php操作mongo进行增删改查

江小白 2017-06-16 0 378

连接MongoDB数据库

1

2

3

4

5

6

7

8

9

$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)); #完整

1

2

3

4

5

$mongo new MongoClient('mongodb://root:root@127.0.0.1');//端口默认

选择库

$db $mongo->papers;

选择表

$object $db->spider_res;


查询操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$object->find();//查询所有
 
$object->find()->limit(数量)->skip(从第几条开始);#查询几条
 
$object->find(array('$or' => array(array('id' => 1), array('name' => 'php'))));#查询时or操作
 
count操作
$object->count();//如有条件count(array('age'=>3));
 
like操作
 
mongo 使用正则表达式进行搜索
参考文章: 
 
$keyword = '123'
$keyword = new MongoRegex('/$keyword/');
$object->find(array('title'=>$keyword ));
 
节点筛选
$object->find(array(),array(),array('age'->true,'sex'=>true));#如age节点不显示就为false
注意:要么都为false要么都为true,不能两掺哦!!!
 
排序
$object->find()->sort(array('age' => 1));  #按age节点升序排序。1为升序,-1为降序。
 
查询时AND操作
$object->find(array('age'=>10,'sex'=>3))#逗号隔开就是AND
 
查询时AND和OR操作同时使用
$object->find(array('age'=>10,array($or=>array('b'=>3,'c'=>4))));
 
查询某个节点是否存在
$object->find(array('age'=>array($exist=>1)));#1代表存在 0代表不存在
 
根据ID进行查询一条
mongo里的ID是对象格式,所以需要进行把传过来的ID进行转换成对象格式
$id = new MongoId($id);
$where = array('_id'=>$id);
$object->findOne($where);
//条件操作符(大于、小于、等于、小于等于等等)
等于        array('age'=>33)    
小于        array('age'=>array('$lt'=>3))    
小于或等于     array('age'=>array('$lte'=>3))    
大于        array('age'=>array('$gt'=>3))    
大于或等于    array('age'=>array('$gte'=>3))    
不等于        array('age'=>array('$ne'=>3))    
大于并且小于等于  array('age'=>array('$gt'=>50,'$lte'=>74))

删除操作

1
2
3
4
5
6
/** 清空数据库 **/  
$object->remove(array('column_name'=>'col399'));  
$object->remove(); #清空集合
/** 删除指定MongoId **/  
$id = new MongoId("4d638ea1d549a02801000011");  
$object->remove(array('_id'=>(object)$id));

添加操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//**向集合中插入数据,返回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)  
 
//**向集合中安全插入数据,返回插入状态(数组). **/  
$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,array('safe'=>false,'fsync'=>false,'timeout'=>10000))  
/* 
* * 
* 完整格式:insert ( array $a [, array $options = array() ] ) 
*    insert(array(),array('safe'=>false,'fsync'=>false,'timeout'=>10000)) 
*    参数:     safe:默认false,是否安全写入 
*         fsync:默认false,是否强制插入到同步到磁盘 
*         timeout:超时时间(毫秒) 
* 插入结果:{ "_id" : ObjectId("4d63552ad549a02c01000009"), "column_name" : "col770", "column_exp" : "xiaocai" } 
*    '_id'为主键节点,在插入是MongoDB自动添加. 
* 安全插入: 
*    (注:safe已弃用,建议安全插入使用"w"=>1(默认),非安全操作为"w"=>0,此时虽然不能往数据库插入数据,但是不会输出任何提示 
* $person = array("name" => "Joe", "age" => 20); 
* $collection->insert($person); 
* // 现在 $person 【已经】具有了一个_id节点,所以我们再次保存它的时候,将会得到一个异常 
* try { 
*     $collection->insert($person, array("w" => 1)); 
* } catch(MongoCursorException $e) { 
*     echo "Can't save the same person twice!n"; 
* }

更新操作

1
2
3
4
5
6
7
8
9
10
11
12
13
注:每次更新会改变类型,如‘1’那么当前字节改为string类型,为1则改为int类型
 
修饰器
$unset 删除节点
 
$set 如果节点存在则更新,不存在则创建
 
$inc 自增自减节点数值
 
$addToSet 添加节点数组 array('$addToSet'=>array('status'=>1,'age'=>'23'))
注:增加一个值到数组内,而且只有当这个值不在数组内才增加。
 
$push  追加一个数组到节点 array('$push'=>array('dd'=>array(‘ccc’,'qqq')))

OUZO2RG}U]])VTTDU)C@0DL.png

1
2
注:节点一定要是数组类型才行,如果节点不存在,会新增一个数组类型加进去。
$pushAll 追加多个数组到一个数组节点 array('$pushAll'=>array('dd'=>array('ccc','qq')))

KJINOV{GT08HDV1TD73H{[5.png

1
2
3
4
5
6
7
8
$pop 删除数组内的一个值 array('$pop'=>array('dd'=>-1))
删除数组第一个 -1 删除最后一个 1
 
$pull  array('$pull'=>array('dd'=>cc))
从数组field内删除一个value值
&
打赏作者
打赏作者 打赏作者
免责声明:本文仅代表作者个人观点,与本网站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
作者: 2017-06-16 14:10:37

发表评论

看不清?点击更换

评论列表: