管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
& V$ M/ p: ]- R9 n( a% g3 @
6 r5 b' c9 x% c/ P v7 V5 `下面用PHP7新的API总结一下:& e7 v2 A! ^* S' h! y/ t
' r: _8 [ `2 c( n1 K) i& _2 n* q一:CURD6 b x5 ~/ l2 h
4 K* G( p2 P$ `/ Q' |3 a9 |$ X4 O
1:链接* p4 D, C# Z6 [
( D* f, r; O C4 _- <?php
( N- H. Z: P9 V- E8 e - //链接mongodb
4 A3 o$ }. ]3 e. g - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
T7 ^3 J4 R! [* N0 [ - root 用户;123:密码;如果没有密码则不写
复制代码
0 l% W9 P5 C: ?
: ~$ x% S* C- I7 i0 I5 f2:查询+ J" R+ o* t% m% _8 y5 k
0 y1 l8 R% l2 A& C" w5 D, J8 W- <?php$ t1 O4 Q9 z' n$ o; X o( T
8 q! u4 _# [1 d6 m1 `. @0 t- //链接mongodb
5 V. d9 g* |; D! ?% P - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 i7 v- N. ~: n2 }7 `/ Y
- 4 q6 d. V( [7 B/ I6 m2 T% [4 A
- //查询
$ s$ x( q& x9 x; U - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 v0 `8 s" f& `2 b3 {
- $options = [5 N, C! W( G7 \! H0 [0 Y6 K
- 'projection' => ['_id' => 0], //不输出_id字段
6 Q& r, K7 F8 n t* \5 [- ? - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序4 T2 T# E2 l2 u% R3 _
- ];
9 ^- H, ~$ G' l9 R3 b/ Y6 P - $query = new MongoDB\Driver\Query($filter, $options); //查询请求- j c. `$ N6 {6 O* o
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* Z9 t0 m# \- _9 q/ [, C4 K
$ {4 k7 E% x6 @7 g" Q0 n- D, n- 4 p" p: T5 z/ ^) e
- foreach ($list as $document) {
$ b/ r. I2 S: Y3 R6 l - print_r($document); , ]0 }' F; ~1 I
- }
复制代码 ; v3 c& m% K3 u" e1 M+ K1 s
查询更多条件使用方法,参考第二节mongodb基本命令,查询+ T# ~) I7 s& ?- G* B
2 o6 B6 `# j/ ~) x7 T, q% L3:添加. W" W1 m: |) V! R/ Z1 K" ~
3 B3 F7 a6 e3 J; R. R% U
- <?php
' q5 Q) }) ]' ?: r1 L, T6 G
8 M9 t1 q& i) o5 t- //链接mongodb. n. h$ @: p5 Q' J: e+ t- Z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 D! G' `! |3 \) Z+ U* V4 r, l+ P
8 {) b+ P8 \, T) g1 U4 f; w* {- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ z6 i4 J9 L, |) o5 ^2 O. L# I% M
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ U7 |; l; K6 w% s& l0 K - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
$ e* a- x; O5 W% B - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
d1 O. G: A7 H* s2 x4 Q - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ Q3 L# Z9 R% P. f# d4:修改2 Y6 a/ u, e+ Y: v- ]' T
+ _/ h- c3 b* R9 B! j- <?php6 C& g# x3 l! N5 h
2 Y+ d ? F: r* }; ~/ i7 o- //链接mongodb
) q- I! f5 {- R+ o- B. S( j - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
: Q: @- _& C' a4 k( W
9 \, e5 K0 M! `; }) [- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; i9 q* P0 P: h - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* s8 Z+ g( g. F I) v l7 w
- $bulk->update(
* [# o9 s( f/ ~4 e" f& x( n6 b6 X( t" x - ['user_id' => 2],
* D0 F3 g9 r4 |1 ` - ['$set'=>['real_name'=>'中国国']7 N$ U+ D1 O! x5 o
- ]);
! I8 x& k. ]! d p" [7 c% a# Z - //$set相当于mysql的 set,这里和mysql有两个不同的地方," y- k9 r4 Q, z. ?
- //1:字段不存在会添加一个字段;
: z' V* X3 @! [ B - //2:mongodb默认如果条件不成立,新增加数据,相当于insert* \( v' |0 J) j+ }/ q
- $ T, T7 x) ]/ E5 \% u
Y5 Y7 Y9 m4 P0 }) p- //如果条件不存在不新增加,可以通过设置upsert
: [) o5 y! s1 e( | - //db.collectionName.update(query, obj, upsert, multi);6 x/ [2 b' }0 c) N* f9 A
- , ]9 q+ p+ i, b& D: b
- $bulk->update(4 {/ b3 d4 h5 f
- ['user_id' => 5],
; n/ g: v5 x- g) }* G+ @ - [
) U- Q% M; o: {8 ^8 Q; u4 I - '$set'=>['fff'=>'中国国']) }/ L" o; C5 p1 r5 d5 u k3 w
- ],, j2 S( W, o7 x; U( P6 e8 L
- ['multi' => true, 'upsert' => false] # }+ }# T4 O6 B
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条/ @. n0 j4 `3 k1 G' v& S
- //upsert为 treu:表示不存在就新增, b7 x2 ^% t6 g3 i
- );: t$ U. Y, ]" D$ |) z. ~
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 , D0 x$ h6 S) B, T! w' y
2 A# r/ A2 W* a V) ?* `/ z& X
ordered 设置5 I* a1 ]8 o' e2 p: d$ H
$ O; C M4 H+ b+ H- |8 b
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。: q3 `5 u8 [. Q4 E9 z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
, P4 q! m" Q+ n* n0 h' N! f% {( ?& f/ N, \3 f, P y8 u- o
5:删除
& D" T ]5 f- S0 j. C+ t
1 ~1 q: k: z L) b- <?php5 {2 \0 Y: L0 E) @& O* ~
- 3 D3 r7 c/ Q$ H2 j
- //链接mongodb
- T$ p; q% @4 H8 K7 v - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; b4 p7 j% k- _. [
- 2 W& |, _- a9 z3 Z' J8 E
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) [7 c, [8 y% o/ f! z- q9 b$ w: P
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( R0 y1 i+ l0 [% k. O
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段) T+ `2 f- |( _' K
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
* b/ U( ^7 ^; C, T' N* b - delete还可以通过limit设置不同删除方式
9 f+ V5 @; l& q: V6 J; G - 2 l" U: Q9 ^1 e, e4 @4 T! |
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
9 i) E; B [7 Y2 d - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 1 Q$ W& g& ]6 c# C& P/ e& L# d! b( z
. K m2 A& Q1 v2 l$ w; P# l
6:捕获异常+ R1 U# h1 a% Z! F7 _: }! ^5 a
: T8 w' w8 r4 l9 f7 q2 h( L- MongoDB\Driver\Exception\AuthenticationException
3 K% Q; ]) q8 ]5 x6 C3 Z - MongoDB\Driver\Exception\BulkWriteException5 Q$ D# I" v% h' o' X
- MongoDB\Driver\Exception\ConnectionException9 X# h8 ?* r8 D |! ]
- MongoDB\Driver\Exception\ConnectionTimeoutException2 y7 F; g% a% ] {" P% t4 U B% e
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口: A E% k% J4 R
- MongoDB\Driver\Exception\ExecutionTimeoutException {4 Y8 i, F- h! I! l
- MongoDB\Driver\Exception\InvalidArgumentException8 y$ i. k( b8 i0 T" R
- MongoDB\Driver\Exception\LogicException9 V/ d+ I; q# a" J+ \
- MongoDB\Driver\Exception\RuntimeException4 O' ^: C% b0 W4 x& y
- MongoDB\Driver\Exception\SSLConnectionException
1 d2 n+ `" u4 M - MongoDB\Driver\Exception\UnexpectedValueException
2 j5 U" Y; F* R; k1 v3 t - MongoDB\Driver\Exception\WriteException
复制代码 9 p8 Q2 A+ j# x1 X
/ v. t' k+ M0 C; M# p7 P& {
; o* D( k% o. _; a2 g点击查看全部$ ^- }8 H4 j& Z
+ {* i' y2 N5 D5 @/ b
) Y4 ^4 j7 [0 g0 J+ u
|
|