管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
% L. s' A) o1 t9 }9 i, o; e, n' ]. U5 Q- w7 @# H3 H
下面用PHP7新的API总结一下:
) i- H5 e* ?: O8 m) b
% w$ j- \6 S. I' m+ ~- H0 ]一:CURD
! |- R2 o4 W: h5 ]% k$ ?
$ I5 v- r; s3 Y, N2 t1:链接$ C) C3 P6 H5 |6 w
# J# P1 f& T' `4 e3 l# G
- <?php; ~! w8 J* P& @7 j0 H
- //链接mongodb4 p) H3 r, t8 M$ t) r
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
, g4 R8 m9 v$ L- _5 J0 }4 ~ - root 用户;123:密码;如果没有密码则不写
复制代码
& ]4 x1 H2 X+ w1 y3 R
" y4 [; v3 S# G8 f; |" t+ r1 d2:查询) v- C- T! r8 a6 ]- `
& o+ C: m( }$ o" y- <?php) `( e7 S; ^- C& G1 l9 Z1 M9 y; i5 e7 [
- 1 i+ j/ D( w4 v
- //链接mongodb
! y R; [; t/ a- C - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ G6 w+ f1 Z2 l5 Z8 y
' G! ], |! g: U" S7 F6 s- //查询
# H: g/ z7 y+ v$ c W - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
6 h c! p9 \ @- R6 S - $options = [
8 R( \$ M: s9 y* m2 M - 'projection' => ['_id' => 0], //不输出_id字段( n* w# ~2 \5 N. ]' n R. p8 G
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
, k5 S" C; @! G$ D - ];
# p, O' c4 w5 {) h - $query = new MongoDB\Driver\Query($filter, $options); //查询请求 c. g) }3 X( h( f; m6 F
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; r. g/ D' N1 X. y" p
- 7 M: _ p* O, p. h
- / h1 e! _: ?; _; u P
- foreach ($list as $document) {
/ T% o# R( r, o/ X, N4 s - print_r($document); ) G7 {8 M( U' H0 t- L) p
- }
复制代码
" J9 ~1 l, _+ g' p O" p查询更多条件使用方法,参考第二节mongodb基本命令,查询
0 _- Z& O5 p+ i( n/ |+ c/ m- ?* ~: {0 [ `% U; H0 i7 ~( ~
3:添加1 i/ K6 b* H+ b% T8 k1 N2 c
2 a" K, M4 K+ u1 I* ?
- <?php
& i7 y0 X4 b0 x3 h) E
1 J6 T( l+ K& t! a* p- //链接mongodb0 z6 K/ N" q* M5 l: R
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- Q" T, t5 W% h' @5 t - 3 `* U1 I0 A/ Y+ k' v3 g
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行6 r3 s% e, v/ n* x" }3 S
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
; k5 N3 x# Q+ C2 i4 r4 Z - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
& X( t6 @2 j% V) ^) y - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);& V; [7 Q, ]( I: R g
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 P& I6 t& |: t2 X! Q( P7 W4:修改/ F9 g9 u: q3 c
% t+ n; ~) |: Y {* U4 d) `/ Z- <?php3 p5 ]* I5 m, H: u3 K
- 3 l" s$ S; F( i' j
- //链接mongodb
! _8 y$ X3 v- \4 `' ^" T! K; e - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
* I5 T. S+ x R/ K& i - : i6 N4 y% c6 D
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
/ p! U" G5 A' n3 g! c - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 ^: X5 u6 {6 S
- $bulk->update(+ `8 F2 b: w; W* M2 g
- ['user_id' => 2],
5 f7 j) X; Z3 a6 N+ C - ['$set'=>['real_name'=>'中国国']
* F9 i. J$ ^! ]$ s$ {, N9 p4 d - ]); ! W% P# [" r# ?0 J. K
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
0 l8 P# \' `! o, L - //1:字段不存在会添加一个字段;
& B, n& ?+ N. }( q - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
# j' V4 n# ^, `9 L6 j. x- G
$ \1 ?3 I! I: ?6 \+ D( x
~* k. v& V/ j; J- //如果条件不存在不新增加,可以通过设置upsert
5 w8 w' ~& l. ? - //db.collectionName.update(query, obj, upsert, multi);1 o1 ~9 x+ q/ w9 r5 x O
- + r7 P+ X8 a; o
- $bulk->update(: d/ A' w0 z$ p& l& N' M% }
- ['user_id' => 5],/ _$ @+ G+ `! G a" n
- [
0 w: I& \3 Z6 i$ w3 \ - '$set'=>['fff'=>'中国国']+ Y, m' }& C5 |, b% c4 K
- ],
9 Y3 G2 @9 t& s - ['multi' => true, 'upsert' => false] 6 q, S' N# l2 u
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
0 b2 |1 W2 \2 Y/ F. ] - //upsert为 treu:表示不存在就新增7 O) l! x" u M/ r% g
- );$ f7 l- W. W9 |+ U l5 Q; D
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 0 K$ I& J1 k; i* W6 J
# Y/ [0 a" D5 X9 Z: A' ^& x
ordered 设置
: C; r/ i6 b: ]3 c/ l: W; W4 {- H% P7 M; @! c% q- j0 F! t+ r
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。) L% S/ J: D# ?7 n- Z9 z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行) J/ j( u$ X$ c
0 R' Y: f+ J' @7 v: n5:删除- Q r* u: \# A$ F1 V
9 W# W6 y* V G$ E/ x5 `( T
- <?php0 q* x( y% r9 a/ [
- , r( }+ L4 t" Z- I3 g
- //链接mongodb
( i% K0 W6 E, `9 }0 z$ o - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 X# s# X7 ^7 t( E2 {+ e$ j; z
- # U, ^) o. Y$ U- A& {
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 s8 U, t+ g9 Y7 a6 m
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
J2 c1 M: U0 m$ L: w - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段0 p5 F1 S6 X. L. n! T& F' L1 h Q
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
6 o& u9 [$ T0 u2 ^ I5 q2 S6 Z - delete还可以通过limit设置不同删除方式
, M7 }. J* i) O9 ]. _7 ~ - 2 P4 c; {$ _' d$ D
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
" k% E; N8 A1 O - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 " d; W2 W( e1 X: }5 [" w9 _' u
+ \. K2 C* i5 W4 G& ~; l1 Z& F2 Z6:捕获异常4 Z( ]. R1 B$ F# }' T; f5 N4 D
: I! e7 x6 H, ^6 S- MongoDB\Driver\Exception\AuthenticationException, r( z2 e! b8 u( b
- MongoDB\Driver\Exception\BulkWriteException
9 G6 Z( ]. U, S* B, y - MongoDB\Driver\Exception\ConnectionException# U7 y- b( G* _/ N
- MongoDB\Driver\Exception\ConnectionTimeoutException, J; ?; V% c9 J; A
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
4 Y; n5 f; b# P3 t8 j* ~% k - MongoDB\Driver\Exception\ExecutionTimeoutException
$ b) ^1 \; l& D6 {) o4 _ - MongoDB\Driver\Exception\InvalidArgumentException1 g. k( S. ]; o
- MongoDB\Driver\Exception\LogicException9 m! K$ P4 A9 ^( X7 Q& T* d- F7 F/ X
- MongoDB\Driver\Exception\RuntimeException3 B! q3 }9 X8 ~, A) X# Y @4 r' u
- MongoDB\Driver\Exception\SSLConnectionException$ u$ u" I9 r+ J6 e$ e- H0 _
- MongoDB\Driver\Exception\UnexpectedValueException) k( r! t$ Y: U+ ?1 }
- MongoDB\Driver\Exception\WriteException
复制代码 5 ?0 F( u" F; V$ H' B- o" o
; M# Q9 A( M0 a' d
) y, Y4 K* l& D1 ~: |点击查看全部
3 l4 x% i6 w+ p; G9 i2 r R0 m1 q8 b
& }' g8 d! a2 x. D3 X! R; R3 X' \# M! o7 ~9 V5 \
|
|