管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
1 f% p3 N" e& I. @' z
0 ?& }: Z! b/ ?3 N下面用PHP7新的API总结一下:7 e3 k b/ E) i$ h: R" G% }: e
0 z6 ~% k0 D# w9 K1 N! ]一:CURD
5 G0 H6 h r; b+ |) C/ G8 x
- b" j3 c8 k: L$ Z& s* V5 g% T1:链接$ l/ b3 T6 I) t. r: Z5 W4 O2 q
X( v, V1 k' e) _* e. v
- <?php5 D- G: u3 ]! H8 j9 M6 y
- //链接mongodb. h* x5 i. ]1 |; s `
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');* O0 S+ t, j3 ]! T. ^
- root 用户;123:密码;如果没有密码则不写
复制代码 $ k d# }, ~; \/ D! j" ^
" ?$ h' e s& S* _
2:查询2 M. a2 x$ H( {$ r7 I, l
3 F# C* Z8 \& z3 }! T5 L
- <?php
# y+ F: R; P3 C4 e3 t
! s/ s1 [. g+ l9 h7 E5 v4 U- //链接mongodb6 H3 m9 q& D1 }; P8 z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 ~9 }2 m7 K7 m `$ f
9 L z' E+ H( e. Q2 r' r- //查询. j; H- X8 D4 e$ i& r t
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
. W% y0 G# O$ T - $options = [8 b! n0 b8 e9 o- T
- 'projection' => ['_id' => 0], //不输出_id字段7 o" N7 j& I( D" r- c# o
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
* X# t9 |9 F6 m' F - ];7 `! r% a( `( A4 i3 s0 Q& } u" ~: P
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
2 U5 k0 M) y) \2 D" i - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合' i1 ]: k% @& }; Z' k
: Z. X2 ? V( z6 X _
; d8 j3 g$ y6 _0 ?% E2 C& K: M- foreach ($list as $document) {' a5 {) @: p+ v: _
- print_r($document); 8 z* s2 S" f/ b, e
- }
复制代码 ' i, b) z/ R3 ?/ o: Y
查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ `' N5 ^0 H; I0 ]' n
$ n- S" o# p/ F, u: e: j1 u( i" B3:添加& g, a9 K( M% c) R# e
3 b$ V" a+ A e/ r/ W$ O
- <?php) w" E9 e4 P' D" b. x
& l4 M! M7 t9 b% ~- //链接mongodb! _: [, N; Z! U) d* p
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 a9 O6 @8 |* b8 @2 ]6 A - / ?3 _4 j& q7 E! h, x4 o* ^! x
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% L+ |- p# p4 ~0 a( W: C' D
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( Z a3 y5 V/ d A - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]); c8 F; _2 l# Z8 r2 N
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
" X# g6 v* P9 s& S2 X7 f9 v- G - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
1 f: j* X( Q' ~1 C) E7 ~/ z: C- A4:修改
! ?% a W" i: L* K2 e
1 y8 q2 ~ G6 M% Z- <?php3 v4 R4 V# H( ]. \* d) j
& p3 R7 [/ r T$ |6 O- //链接mongodb
, I9 u! J0 i6 R+ f+ p! t4 [# N - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) G; A3 q$ N: u
- / {: c) F0 Y# p* }2 Q2 j
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 @; g. A9 n$ w0 d1 x - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
3 F6 h6 c& s1 Z8 c! S; i" p - $bulk->update(. Z1 p! N! b' r& \
- ['user_id' => 2],; p. l" x3 x& z! v6 n
- ['$set'=>['real_name'=>'中国国'] |6 B5 a) F: U8 ~: N" O8 s( _
- ]); % }5 M0 N x4 r6 I; P& Q& I
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,& [" v% @2 d8 i3 [# b
- //1:字段不存在会添加一个字段;
' n. b% q3 t: A$ V, }) _ - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
0 B) n( `7 F/ Z7 S8 N% } - ; t' L4 O. n2 t* j
- , s, ~$ q$ _- u+ H' K% f; H2 a
- //如果条件不存在不新增加,可以通过设置upsert+ [+ I( {+ {. x# ^9 O- A
- //db.collectionName.update(query, obj, upsert, multi);
; h- o9 b3 S$ i1 \* s* Q
% W% i2 d6 b5 r' D$ R/ y- $bulk->update(
+ n" j* U2 d* }7 \ - ['user_id' => 5],; u. w& q& C. W _; N
- [
: E1 D% C2 b% y8 k9 T [ - '$set'=>['fff'=>'中国国']+ _1 ~7 k: q) W# P- {: z* t0 A- r
- ],, t% Q0 y5 e) ?
- ['multi' => true, 'upsert' => false]
. k2 A$ @! w k6 Q& r - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条9 D- v6 n" r0 s5 ?; S9 a( n
- //upsert为 treu:表示不存在就新增
. g* @, V' y I$ W: Z - );6 M4 ~2 r+ x( t8 \
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 o$ u& G' V' T7 j' Y
" L5 U( R3 f) Aordered 设置
' [2 l* j" u7 ~$ F( C4 V. I/ ~& W
. e- Z) b2 G6 v9 p3 m1 [1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。8 j2 Z& G7 R* e
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 O/ d! }: V1 P4 |7 E
9 K7 R4 N0 s) r% N+ e+ e* i5 Z5:删除
$ p4 n4 V% i. H4 l: h4 I) a% ~" ` b* h- B
- <?php
$ x) l+ ~9 K) G* S- _
) D+ G ^, H9 a- //链接mongodb+ I4 {1 v# A$ `( K8 k+ F
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- Z: e! O/ T, p+ m
f- ^1 w2 q, U* R! g, f9 ^2 w7 ~2 k- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
: `" x9 Y# x* }& r+ P - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- p+ I, v D& F
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
0 T' C: l2 n5 i0 d5 `1 J - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合8 o' r( O# H1 c! b% W# I
- delete还可以通过limit设置不同删除方式
^( l/ n8 f0 ?: _9 ~3 o - $ ^: u* q& G; z/ x7 z3 O ^
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据& n, C) i* L& I! u8 Z h
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 0 i, u1 w1 s4 Z
2 {6 z; _/ A- N. }3 Z6:捕获异常
1 h+ d, f3 e6 x9 u. ^# o' E; ]7 m2 q
- MongoDB\Driver\Exception\AuthenticationException
1 @* Z4 b: L% w - MongoDB\Driver\Exception\BulkWriteException
; i$ }/ N: A- a- S3 Q e - MongoDB\Driver\Exception\ConnectionException' Q! v$ m$ H. J
- MongoDB\Driver\Exception\ConnectionTimeoutException: t* ^' n& c3 U I4 `' B; y$ O' O
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口4 K' s& ]% `: Q# B* c$ ^6 G
- MongoDB\Driver\Exception\ExecutionTimeoutException7 \' g8 b. ^* X8 d7 J
- MongoDB\Driver\Exception\InvalidArgumentException
! d: S0 q# p+ `/ Y7 I! A# A' s# h - MongoDB\Driver\Exception\LogicException. w0 d$ D* ^0 x `# @4 L% e4 C
- MongoDB\Driver\Exception\RuntimeException; v d; p2 p2 z+ M7 {
- MongoDB\Driver\Exception\SSLConnectionException/ |3 q8 A M" v) ?; ]
- MongoDB\Driver\Exception\UnexpectedValueException
; S b; Q" M" [. l7 ?0 W) o3 [- h - MongoDB\Driver\Exception\WriteException
复制代码 + V' ]; |4 P' O# l; t( v5 T
# I( Q8 T: V; z, X
+ X L" J7 S# \4 l, }' z' v% T8 M
点击查看全部
8 [) l% ]3 U- l; W% v, ]& D5 G5 q# K. S; q+ Y9 o( c
9 `* C" K5 q: W
|
|