cncml手绘网
标题:
php7的mongodb基本用法
[打印本页]
作者:
admin
时间:
2019-6-24 20:58
标题:
php7的mongodb基本用法
提示:PHP的mongodb扩展,从5.6开始已经废弃了原来的mongo扩展,php7的pecl下载地址:
https://pecl.php.net/package/mongodb
,或者选择mongodb官方开发:
https://github.com/mongodb/mongo-php-library
,git上的这个支持以前mongo写法,pecl上的mongodb不支持以前的写法。
( F4 n4 Q0 S" E1 b& r4 s/ e4 m
, s ^% `3 Q8 `8 m/ C; N) z
下面用PHP7新的API总结一下:
0 E; S4 {5 M# h
" L5 j9 u* u8 f3 @0 U8 i
一:CURD
% _- r9 E4 x: W" M
$ q3 H, X- K# |0 l
1:链接
. I3 Z2 r1 a! V- N5 V0 K
6 x7 E: e i a/ l o
<?php
, s. N" N+ R" |, H/ u
//链接mongodb
7 W& r# U3 z6 s- n ^, E2 O7 {
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
8 g; p9 T0 H' L
root 用户;123:密码;如果没有密码则不写
复制代码
" d. O6 E0 S3 O, N8 _9 |/ ^
8 s" S$ ]1 | |' H
2:查询
! W {+ O! x4 N! Q! v& T
' x c9 x; y" \3 V' [, A0 W
<?php
$ H& j! p; Z. O* b4 ], `
1 e$ r( C4 N- A( g* C# t
//链接mongodb
% `# ~! d7 l; N& t0 K
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" b) T E; n( @& ^+ E, s
1 P7 Z4 V! p+ A! t5 k- L6 f
//查询
: I( s( L% C) Z4 \! Q% a1 d* f8 [6 |
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
5 h) j- }3 `* p0 w' a9 n* g
$options = [
, }* v. |* p4 F4 A
'projection' => ['_id' => 0], //不输出_id字段
7 s n* b/ R- m0 z- k! w1 ^
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
- {0 g C, u2 u9 v: J' k4 S
];
- W( t" h( w1 N. B7 l
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
0 ~, A4 C# ^' `. i5 P
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
) c. n B4 {7 B* j4 H& B% j
7 m( @7 W" O8 J4 s7 s
/ w! a$ d% q9 }5 K3 I" I/ X2 E P" W
foreach ($list as $document) {
7 r/ i9 O- c: N8 a% l
print_r($document);
- ~5 J9 Z+ X" e
}
复制代码
$ O# U: A5 L- p- q+ v
查询更多条件使用方法,参考第二节mongodb基本命令,查询
' d6 l! ~* J* E+ I8 }
' I! Q! E; y* u- D W% N: [( Z
3:添加
& j8 \8 _% a: l# D. q. j s
# w& W* H* ?; {
<?php
1 D" O7 k1 O# [, k3 R3 }* U
* X/ @ A+ \! N1 P& E( I+ n. G
//链接mongodb
" {* U0 G. `$ L
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- o0 x8 k+ n/ ^' w- Q
5 u3 }1 W! a; }" N+ w8 g! e
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
7 Q G# W. g- m* e4 n
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 W* l8 u* @( m G' p! @; l
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
. F( W) v, t1 [3 h8 I$ {; T0 K* I+ t
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
2 |& L& E1 o, U, X- V& P5 C8 N
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
' r: [4 w2 A8 F* d e: M" z3 k
4:修改
8 l. Q. S |6 _ w
N" I: K9 i. x1 i
<?php
- v/ P/ J* f1 z( I. C. V
% ~$ G- M# s" _9 Q, H+ l
//链接mongodb
, H- d; ]& C( Y. X1 U6 v: z
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) h' A% Q5 c( z+ y# V
0 W8 [6 Q% C/ q. T5 C8 f
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
* B3 t5 P2 X3 ?3 \% L
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
) P+ \ z' r7 z) V. b$ ~
$bulk->update(
! P% l& E4 Z0 ~' o! `8 Z0 Q2 b5 s i
['user_id' => 2],
4 _( U7 E9 g; Z! w& g; @0 r
['$set'=>['real_name'=>'中国国']
+ A1 t! B7 i* O4 d$ t* b/ \8 b/ u2 f
]);
& a; Z' o* T6 @2 K" M9 D0 N- V
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
0 a" h0 v: M4 K9 X
//1:字段不存在会添加一个字段;
* A- j3 E! l' W* ^! ~
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
# @7 G) b' {5 L' r( j+ \1 w+ ^
: _6 F/ h# I# O d! Y; U& p. O
! I+ w' _& h- w6 N5 x
//如果条件不存在不新增加,可以通过设置upsert
; g# E3 J8 H w# I8 W3 T
//db.collectionName.update(query, obj, upsert, multi);
2 H; V6 t6 Y; x9 R, o
9 T: d( U9 b+ N$ |/ {" I# e
$bulk->update(
! B9 ^4 a e5 C* k
['user_id' => 5],
3 c5 T8 q- v0 W2 t0 Z; x* x$ n
[
2 `' c; }- e; \! W' J; i
'$set'=>['fff'=>'中国国']
1 i4 y4 e2 R. u* J; \( j4 L
],
, y0 t6 | m a g% c
['multi' => true, 'upsert' => false]
# b# _( a i4 h7 F
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
" j6 A0 Z* R( r! X/ n7 S+ K
//upsert为 treu:表示不存在就新增
, i$ z' Y% T; [5 O8 M5 |7 v
);
1 J: e$ \& s3 W5 e! r
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ m9 z6 `3 v9 c# |
- u/ s3 A% q; T0 A+ _5 R5 y
ordered 设置
7 K0 Y$ s$ h: I, G9 V, a6 K9 p$ \" C
1 x7 A& e* i/ J/ J: O |0 b
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
. v- p" ^# Y. c& A0 F, e
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
8 e& w- S3 ]0 H2 A: i& V! `
# @0 h/ t" F4 h. T! {7 _
5:删除
0 I* S7 e% H/ r
' d/ a' I2 F/ E: a$ g
<?php
7 T! m# H3 N* T6 f# y& B
0 }* V8 ^) W* P
//链接mongodb
/ i5 P6 b) ?' K) U) D- R) J
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" z1 |% j& _0 G- e4 K
1 W0 Z9 ~& I7 Z# U
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
. M8 O* q. g" `. k
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
$ J F! k: _) i* r" p0 A* z+ @2 p
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
$ I( T9 l! C$ H% E) l
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
# G. ~; w* B& R( Y% Q* j2 l
delete还可以通过limit设置不同删除方式
+ Z- Z; w+ v$ w) A5 C6 H; K
% J* X& s7 H% Z; X3 g% V
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
9 ?# R* n5 i4 h
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
) z4 T; e' ?/ a: G
+ [' ?( _1 f" ~0 s; D: s y
6:捕获异常
. c6 M C% Z$ z. k
! j0 [+ ~* ?, Q s$ D2 X: u
MongoDB\Driver\Exception\AuthenticationException
; d6 ]5 M3 G2 K9 F0 O* r9 s
MongoDB\Driver\Exception\BulkWriteException
+ v( T( E" L3 X" f4 M; d1 b
MongoDB\Driver\Exception\ConnectionException
' G0 v ~) @/ Y: A/ d
MongoDB\Driver\Exception\ConnectionTimeoutException
2 [& r7 E/ R t) E' `
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
& @% B q2 |! b* c) V9 R/ Z
MongoDB\Driver\Exception\ExecutionTimeoutException
" A2 i# d+ V$ |4 ?: k1 d
MongoDB\Driver\Exception\InvalidArgumentException
8 H7 r) r+ j2 R
MongoDB\Driver\Exception\LogicException
, P. s. z" s9 |7 Y/ p! V) a
MongoDB\Driver\Exception\RuntimeException
# }: W' S/ F' s+ \) l g' v' G
MongoDB\Driver\Exception\SSLConnectionException
# F& g6 \# X* i5 f" @: A ^0 ?1 t ]/ M
MongoDB\Driver\Exception\UnexpectedValueException
1 k" R0 _2 R& ]) a
MongoDB\Driver\Exception\WriteException
复制代码
5 j6 V' u' ?6 b. d4 T5 t! P+ {
- S5 ^. A5 d% N+ p
) S" P, |' g1 T' s9 W% B! K! P6 S' g
点击查看全部
, B% K/ Z& S, J) E% h- w2 ]7 Q
9 v# j; [/ o7 i6 R: z
/ R; W+ `! K. G0 H
欢迎光临 cncml手绘网 (http://www.cncml.com/)
Powered by Discuz! X3.2