管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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/ G2 W- ]- k1 w" g( p0 g! H6 V% ]. ^& ^* a: ?7 }
下面用PHP7新的API总结一下:
. \ |& T5 ~' X( [+ ~ p" k) s$ e- M6 O* D
一:CURD# b7 \) c; r& A" s: A3 n
# Y1 d# x" Z& ^/ ~! A1:链接7 u* {% U5 B3 v; E# F( \. x+ e5 @5 ^
k) j% t W6 W0 W9 U$ M* V! d6 @
- <?php
3 H$ Y( }' b& o( e6 f - //链接mongodb( q, j: ^! ^8 ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
) ]2 G7 w8 L1 b7 u; i! B; ]8 e - root 用户;123:密码;如果没有密码则不写
复制代码 ; n9 Y7 ?# O) ]+ C
5 a- M$ X# Q. U! E- ?
2:查询
7 d7 y |4 d: h. H& `+ u0 Z' d" m- Q5 m. t b, h
- <?php4 L* f3 ^# z8 k8 D6 ?
- $ e. e( d# n$ |
- //链接mongodb
( ~; ^' C& s5 l9 F' }+ o V - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% `8 z* V# C2 v0 i) h3 Y; Q- H
) R8 k9 M& F# P2 t, X9 W- //查询) h" C. K( e& f( z5 k* k6 A. @+ h" ^
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
5 M: z& P2 V% ~/ v* Z2 E - $options = [% P+ Y& {4 L$ N0 r4 K6 L5 O4 b
- 'projection' => ['_id' => 0], //不输出_id字段
' f# u' A, @: R' d$ m% N M3 R - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
5 T" E' y* Q% d4 H' h* v. S0 u/ D; s - ];" H9 S$ Q1 B! b3 d0 t+ d
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求9 k' h2 }/ Z; x$ T4 \
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
, e# \$ P5 Q: n, @
" |+ d a& d7 R7 g7 i
+ Y/ ]* S0 ~, O* P. D- foreach ($list as $document) {7 e d0 M' J0 d" l& Z
- print_r($document); 2 A4 O1 o/ B$ @; s( g( R+ n; I
- }
复制代码 $ {# ?( y+ e* d9 U/ h
查询更多条件使用方法,参考第二节mongodb基本命令,查询
& ?1 [, n- F( N, m
2 ~" Y5 h5 n1 ]$ e8 U, S5 V1 d3:添加
/ K" ]# T% d% c, n6 C3 l2 h7 v
- <?php
" x- o4 X6 p9 q - * K9 Q1 z5 Z. U+ P3 j
- //链接mongodb
# V$ c# l/ A& E4 B( D - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 a7 M% ?6 p' [! n. H- i
4 s4 D+ [4 R5 n! F# g3 i5 K6 F- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 S0 J, B* O. O2 Y
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 n5 Z; x' `% n( x9 V - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);5 _2 m' \( @$ T m& a+ G! ?
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);4 ~8 L0 r; S ~+ z% m# r# F
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 6 [4 I1 E5 {! Z, n/ k5 ^+ c
4:修改' q+ C' k4 l; E0 q) S7 J2 i
0 P. r8 ~' x! ~- ~8 u
- <?php2 A& U4 ~# V+ h/ T
- * ^+ m7 z: |' K8 Q; M0 o
- //链接mongodb+ R: z/ `( R5 a, H8 P- k
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 ~$ x% s5 o+ _( P" j
8 ^) c$ l: h: |& a- D- p- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
8 I. I9 } ?% h- r. |1 h - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
# B1 Y# l7 ?8 O/ P - $bulk->update(0 X. D8 [. k% ^1 _6 ~ s
- ['user_id' => 2],: S) F+ X/ x3 J) e
- ['$set'=>['real_name'=>'中国国']
- G4 h0 R8 Z. H7 H - ]);
; C# P e. t4 i$ T - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
! T% w' U7 w; N; T/ T, Z; e" Y - //1:字段不存在会添加一个字段;
z+ {9 i; G3 a& i5 G - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
" u! F, H8 z% T8 H- B - ' K' L! W" ~+ R0 _( h2 T2 k
- L8 q |& w Y8 P( `' k7 {- //如果条件不存在不新增加,可以通过设置upsert
/ ^) j1 V& d1 S Y - //db.collectionName.update(query, obj, upsert, multi);
$ A4 Y7 u! ^( [ \' I
" j9 r6 J$ C5 ]- ?- $bulk->update(
" g. S" b5 p; g6 l. N& T - ['user_id' => 5],
) d+ G! r) a) q - [
" z) e: `, o" K. A - '$set'=>['fff'=>'中国国']" K+ c# W4 w" m+ j! E3 ^
- ],. H6 e5 u7 }8 Y. J2 \" M( ^. o7 @
- ['multi' => true, 'upsert' => false] a- N7 t2 _$ S/ |+ y/ V
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
`4 x7 K7 W2 V$ ] - //upsert为 treu:表示不存在就新增. j0 m L) q: O4 ~2 X1 S
- );
1 ^' O, @! S* @6 b# [. n - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 * x& ]0 a9 y! r% Y. W/ G
- Z; e" J* S3 A% z2 fordered 设置0 l7 I! f+ C, W; Z* ?, K+ N! e
& v3 b& d& L3 Z7 ?) `" b
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。8 Z2 Z9 h- I, ^) ?' J* B' E
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行% Q; _) g6 L# h; `1 v% w
& I' X" ?1 w, ?& N
5:删除4 @- _ O& D+ t$ e1 J
- M! `! w% F) r& k) ^+ B0 z* J
- <?php
, h! @: @2 Q7 t5 \% R3 ? - : J7 Z1 w! K% U: Y" P! A; P& y" Q
- //链接mongodb
% K; u [4 |* Q& e; ~ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
. q7 ]% z6 R! r5 D! m* r - 1 _/ g w- f8 M* V
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行0 s9 H* L% _- _ A$ u2 @3 ]2 E# R
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行; C; l7 [, d0 C
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段+ i) j9 J, R) d* T; b) d' i
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
; I! B3 R, S7 V: P" A' P( G - delete还可以通过limit设置不同删除方式
8 H+ G$ _: {. N! m" b - * W* k1 |+ v1 K- D& K' c
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据' o7 M% g* G8 |
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 4 l6 \% ^$ m6 G' ]
' q, h) K, f5 ^% P/ j4 P) v, i6:捕获异常
1 C- Y+ j4 P; o7 U" k; T) R7 `! G( `" c
- MongoDB\Driver\Exception\AuthenticationException; p; U& H% Q" B. G4 F* V. b/ p- V
- MongoDB\Driver\Exception\BulkWriteException+ ?( m9 `" I2 I9 U
- MongoDB\Driver\Exception\ConnectionException
2 I" M$ k: I+ N( n - MongoDB\Driver\Exception\ConnectionTimeoutException
7 Y% Y: l% p) Z. v# Q - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口' a+ Z; t0 [2 j7 x. \7 I" _! n) b" l
- MongoDB\Driver\Exception\ExecutionTimeoutException
9 `0 E: |- i. s - MongoDB\Driver\Exception\InvalidArgumentException
. ]9 B0 c8 ?8 S1 r3 W: U# F, M - MongoDB\Driver\Exception\LogicException$ b5 F5 d& P6 d9 a- M& l
- MongoDB\Driver\Exception\RuntimeException( T1 G& D2 F" [& ^3 z# u8 C3 I/ D
- MongoDB\Driver\Exception\SSLConnectionException
+ s a" B4 ^ B4 I5 C6 [* [ - MongoDB\Driver\Exception\UnexpectedValueException
* `2 n) A- D; }. Q O* i; h - MongoDB\Driver\Exception\WriteException
复制代码 9 Y3 K0 {0 j. y ?
$ ]1 B8 R; L) f+ T
2 n/ U/ p( Q/ v) @7 j点击查看全部1 y$ g! o- z& k+ u. h0 b
1 |& e& D% ^/ O& Z, @7 y4 A( I0 a7 p Y$ D- H1 z% A* I
|
|