管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。6 V) P% H( q3 Z9 i5 ^& O- c" l
, `' i" k# n! h8 N; y$ w& _
下面用PHP7新的API总结一下:
. U( v7 f% C3 X8 W9 }
3 `7 j: v5 w9 p一:CURD
3 w9 o$ [- D' e: ] \( M4 F
2 o3 K2 z6 M: B2 x6 V6 T0 e1:链接
) | `' J! v% y2 P: p G1 U# A) k8 T( o4 Z% y8 y4 t# ]& I
- <?php
' m; J5 j0 N: ?. ^* f/ B - //链接mongodb6 `7 D7 _9 d: [9 v" v5 p) `$ M
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
' ~, N3 T- w, u. h4 r - root 用户;123:密码;如果没有密码则不写
复制代码 3 b ~7 F, U; l8 l2 m a
0 s/ E% I" H0 N; p" X
2:查询8 t8 ?& b J$ A7 _1 {! i
! L& M) d- x$ m4 h* }- <?php9 |$ l. z' ~$ j9 }! Q" c' e
- 4 C- s% k0 w$ T' P
- //链接mongodb
6 d. k( ^5 ?: t* F - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 F G8 ^0 O! R+ @. ? - ( n% _/ Z0 g. T$ ?
- //查询4 I' g: U$ D; @; p5 `# s- E5 a
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0! N# \; B- j0 D* q* h& W" `4 s4 b
- $options = [, z0 x0 F, H2 K1 t
- 'projection' => ['_id' => 0], //不输出_id字段
( l' T. a; i2 m6 U. w2 j. q! t4 V* Q% m - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
- {2 G8 I$ t }: H* C - ];, n9 I, A. A5 `; n7 a
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 T- d5 b& j7 J7 n) ^: R
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合" r, Q* E$ Q; q4 f
X: o' J, w$ E9 N/ J' z7 ]
# I' S" I' g2 g" b& c6 F- foreach ($list as $document) {$ s: W' ]& w; W5 \. A) ?( z3 @
- print_r($document);
' w. J( ], W, E7 J" ~ - }
复制代码 , t, N9 o, H. h- G, P$ s
查询更多条件使用方法,参考第二节mongodb基本命令,查询5 Z# t4 p& h- t8 L- F, ?. U. L" D$ c
b3 P- ^5 A, t3 N7 v3 g/ i
3:添加
: Q+ k' h% k+ n* J& ^
5 m2 | u' T) m0 ~( V, C: Y9 J- <?php" T7 e4 D6 @/ r9 u% ?
- - c2 O! i' L! M8 c
- //链接mongodb
* l" H2 i. o6 k: e- H8 K o4 Y4 H" ]1 \- J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! S! z, q8 ^& y# u/ U - ' ^4 e; \( G. h
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 Y$ r+ \; k3 t/ ~2 y - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行0 i6 Y, W( n* X N5 c5 \# L8 t
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);9 ?3 e6 Z; r0 L" O; F- N
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
+ q. }3 _8 ~) o: d - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 / T4 ] `" D5 H! ^
4:修改/ Q2 c1 p/ ~8 d7 h/ {
+ w8 O9 ?: O% F" p& J
- <?php
0 V) }( v: K* ^1 k4 T0 [. Z- n
4 N& d- y- r* p* {+ F+ j3 L- //链接mongodb
, N- c! S* }9 T* ? - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
: j& h: q3 F. l% l
+ E+ E+ I# h, C- Y6 x- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 h$ p* C n. g* s2 T% z2 e
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ J3 O' B F: g
- $bulk->update(8 A" S( t0 w- \+ S, z5 f
- ['user_id' => 2],3 `* I3 D1 b- N5 j; b6 k0 B# U
- ['$set'=>['real_name'=>'中国国']4 Y0 `, T* P2 r7 g
- ]); , D2 A! a- Y' z! I% C. r& Y9 V
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
/ V' C- P3 a! A3 ~ - //1:字段不存在会添加一个字段;
9 K/ U5 Y9 \- x$ s. I7 |2 p/ i. v - //2:mongodb默认如果条件不成立,新增加数据,相当于insert: K% }4 h* H- a% i- P
6 O9 r0 M) D3 L( j
. \8 C( w: O4 z- I% y6 J2 I- //如果条件不存在不新增加,可以通过设置upsert
9 g- |8 V6 ?4 t$ D7 K( v - //db.collectionName.update(query, obj, upsert, multi);
+ V4 }$ O% e$ a! Y: ?$ z4 @- M n" B
: @8 w0 N' t; D a& g5 I7 h0 G; U) R- $bulk->update(4 r! A: ]2 w2 ^( O. o/ d- {
- ['user_id' => 5],' @( V; M2 K8 f8 t: u
- [
- w3 p; n$ e' d7 Y - '$set'=>['fff'=>'中国国']
4 t! S1 j: Q3 a - ],6 I& L5 f+ q" m- M N+ r! P. ]
- ['multi' => true, 'upsert' => false]
& `8 _0 m2 a s3 u4 E) Z* y1 k& K - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
$ s, X: j+ J9 c9 ^ - //upsert为 treu:表示不存在就新增
% z6 \# |5 C' b - );8 A- G2 _. w7 e* j& e
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 % B) \2 w7 P7 e6 S6 ]
* B/ ]7 x2 `- {; V# t( [* i
ordered 设置" A; A6 g- t s$ B3 ?# N6 A
% W% U0 F7 D* `3 `' W1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。: j8 }. F. b6 w# p! w: N
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
% _1 L' ~/ r% T6 R8 U0 K% ^( s
/ l9 O8 f6 P0 Q7 @& d5:删除" B, |4 g( }! h) n" z' _) X
0 `; g3 m, D( \4 `
- <?php
- ^) X& X! D; L6 A
9 d( V8 d% p2 \2 h' B ^( r9 O- //链接mongodb+ }- {& f* v9 G
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, r3 @8 y; t, |3 G8 C - ; J- O* X+ M" [9 T2 _% {
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
/ G" v5 l& S& a& S1 S - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& u) c5 e2 c, G+ L7 g1 a
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段5 w% R2 E# V" v/ N: ]4 x5 c+ `: `
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
3 }- I5 Z) z( ~& | - delete还可以通过limit设置不同删除方式
3 e% K) Q( z/ h) P0 Y( L
# V) V, N* O8 ?- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
7 z0 E& H& {7 e* \; k/ y6 Q2 ` - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 $ l$ h5 |' ?2 G; F6 n* f- L
$ {# `3 k2 E2 r4 Z
6:捕获异常
' j& ?5 P- i! A+ \" H) c7 V
" L+ k E0 x! e( Q6 v9 R$ Y3 ?- MongoDB\Driver\Exception\AuthenticationException
0 }" |% N' o# D, Y - MongoDB\Driver\Exception\BulkWriteException9 Z. N- L. Z6 D" E
- MongoDB\Driver\Exception\ConnectionException. e0 E) V9 m! \ h1 t- d! Y
- MongoDB\Driver\Exception\ConnectionTimeoutException0 N$ B# \0 X" v. h
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口& s( h) B+ ^' |" H5 S! n
- MongoDB\Driver\Exception\ExecutionTimeoutException
3 h3 l6 q/ G- f3 k: N: D - MongoDB\Driver\Exception\InvalidArgumentException
) ~) b4 X- d1 a - MongoDB\Driver\Exception\LogicException
% C4 |1 b" s; |. B - MongoDB\Driver\Exception\RuntimeException
' C) _) e2 Y( \+ S% A- h% h' J5 ` - MongoDB\Driver\Exception\SSLConnectionException, m) Q, @) K1 _! k
- MongoDB\Driver\Exception\UnexpectedValueException
/ @ j# S! Z7 a# u; c; M' ~4 b. N% E - MongoDB\Driver\Exception\WriteException
复制代码
6 ?( @1 T t9 q3 w9 n8 F, ^/ v# A# F) d A% X, u
: s4 c( N/ b# f) r& p点击查看全部4 c9 T5 j3 e6 u$ j4 c4 {
' z- O6 I5 m1 L( n! x5 Z2 e5 L# _9 C7 k) h. R- Y
|
|