管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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 c. g6 G7 J ~' N1 b9 W, D
' H" o5 x* K4 w# e1 Y& b
下面用PHP7新的API总结一下:
) K6 `9 s8 _" `' H- _5 ?* m* }! a
0 v3 v+ S8 M" ~ b; k一:CURD" _# K, a8 W& m8 E$ ~- f
. G$ g# f9 v& d; c1:链接
8 l/ X- f, c Z: ^5 ~* I' h
$ j" _: {8 J3 q7 q" g- <?php
$ n- d1 Y' Z+ D/ V' k" u8 V- f - //链接mongodb
5 d4 q E- \1 h - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ D1 K" I2 i/ p, |, m
- root 用户;123:密码;如果没有密码则不写
复制代码 # A$ T1 |1 e. v7 N* }
8 \% m7 z* \6 o# {% ~, X. {( [2:查询
8 B4 H6 @9 @3 m6 o$ |$ a1 R0 A# q5 E9 \
- <?php
3 R. E0 x6 D6 [! E6 |9 G( x( a7 I - " U* C" N. W( C
- //链接mongodb1 a$ w" j0 |" V1 p1 O3 r
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 ?, T! _. [' n5 U. d0 h5 q; B& |
4 G8 C- j- k) ~' O- //查询
/ F @% f V% L' f) [2 D! u, h) J - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
4 R) K: Q3 v, q% Q* Z. I - $options = [( t `3 a- G! A- L
- 'projection' => ['_id' => 0], //不输出_id字段) c3 V/ ~: |* M3 N
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序" {& x) u; F: g% {% z
- ];
) h+ j5 y& q& ?, \- [+ c H - $query = new MongoDB\Driver\Query($filter, $options); //查询请求2 p' V$ h( [7 \/ v* t3 A; r
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合8 f) r# F* B2 s
# G8 l5 s- I; u' X: l
; i# G7 I* o- F7 Y9 x4 u1 z- foreach ($list as $document) {3 Z S4 W; y+ j* i
- print_r($document);
. c( c7 ?9 c. k6 U, Y! F1 { - }
复制代码 # F4 N& G( b* C) g* Q
查询更多条件使用方法,参考第二节mongodb基本命令,查询
! M6 I9 j( O# _9 x
- B% x" `, t* v) K3:添加2 j+ t# Y. L5 `- R
5 l( B* y1 Z4 o' m* n- <?php8 i' F: h: [2 B4 a
7 e8 i' R: ~; a- //链接mongodb2 S# r- I# G. I7 [( Y
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 A2 m# W6 {5 D( u; w - 8 E& O8 r5 d7 V4 T
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( |* ]! }- I$ W+ g+ @$ d
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 l5 p- X, T5 k$ x
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);% ]3 P4 l. r" j9 c/ ?
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
/ {+ \; G5 y( U0 R - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, J, i+ B4 ?& U# q) e4:修改
, r5 z; Z6 |1 j9 _$ _5 }% t1 f, \ L. j
- <?php, b( H) @ O+ I
- # A3 A, T- s5 G. t# B
- //链接mongodb
1 j# i3 C$ L7 n+ ]1 z. T - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& N$ A w' E! Y/ b - 5 U8 Y0 V9 h1 L# g) h
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' i- v. s; [7 E3 K I& S+ j. \
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' M6 f, h- K9 p/ ~
- $bulk->update(1 l7 U- I, ~$ V0 ]8 c
- ['user_id' => 2],
1 A) w9 ^* [" u6 ] - ['$set'=>['real_name'=>'中国国']4 l. y! C' t- ~0 u- C
- ]); 5 }- i# r. P* n9 \
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,, ?+ d8 y b) M
- //1:字段不存在会添加一个字段;" W4 {' ^ j7 X: S, g
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert& J% G% ^9 O) s& G& O( x; F8 F1 {
7 t3 x& X( e8 C# ]- e( x h- 8 w! |/ V4 f# r, w
- //如果条件不存在不新增加,可以通过设置upsert6 l; R' V T& b: Z
- //db.collectionName.update(query, obj, upsert, multi);
, C4 h" y5 o* u1 v/ e6 I
2 _( M' F* V# V1 O- $bulk->update( [$ L8 u* u) P, M6 r4 N: w/ E
- ['user_id' => 5],
$ t8 Y }" a7 k. _+ ?; ` - [2 t4 O+ t9 \: k3 }
- '$set'=>['fff'=>'中国国']. Q4 l2 H& d, ?# e7 _3 r$ W
- ],* Q. o' o4 |+ t) \7 P. ?' ^
- ['multi' => true, 'upsert' => false] ( w6 ]* H/ [& y) p; C6 p$ ]3 G
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条2 d/ G; g5 C! l t, {$ Z
- //upsert为 treu:表示不存在就新增# o, L& H; L7 W" z7 ?% ` F T
- );
" ?/ w4 w( G! X& H - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
7 I: ?3 b+ f* M, i$ N: S$ F$ P3 D F( y) q: a
ordered 设置5 Z- `% `( q! V& R' I
3 K1 S$ ^) f# \3 q+ C, x1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。# E$ ?9 r* }/ Z( w4 ^
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
' X7 c+ r2 _! g' R! P: a/ R% w) n5 b/ B; n" J
5:删除
9 W; l% B( {' F2 N/ v- Z5 ?; F/ I: Q
- <?php. V! s1 m5 f7 }. h9 q" e
5 z: E9 }# ?0 k! T# J- //链接mongodb
/ V/ h7 H" ~/ _* o6 _! ] - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! G% q; P5 _9 {) N; ~0 }0 D
2 ?* E) o0 Z: Y9 ^- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
# F+ X$ G$ P1 U& z; F3 \( l8 k - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: @- O5 v9 S1 |7 a
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
* ~% r4 {+ y/ q0 } - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
( ?2 V7 Z( P2 T+ W( q/ A7 f - delete还可以通过limit设置不同删除方式
% H" J( u& k+ n5 ^; H6 j4 P, ^
) Y# n e$ [$ d6 e8 ]9 c. }9 B+ C- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据5 p, b" _4 k& O' c
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 " O2 ?6 g/ k. J* _
0 v' k4 w& V' N/ T* a+ B8 `9 ~6:捕获异常
+ Y1 `, ]* c, V5 G2 x9 r6 V* {/ _6 f
2 T, B2 W" C [0 x7 r d- MongoDB\Driver\Exception\AuthenticationException
) Q1 w L& f4 H2 F/ g( I - MongoDB\Driver\Exception\BulkWriteException& ^5 x. ~9 t/ N3 _1 } c) m
- MongoDB\Driver\Exception\ConnectionException
! e2 W- D- b' [. p; I6 A& Q. U - MongoDB\Driver\Exception\ConnectionTimeoutException8 O6 `& R; q8 l- [& q
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口2 W1 c* C0 d6 ?& |* a" T7 G3 K$ n. \
- MongoDB\Driver\Exception\ExecutionTimeoutException+ _) l; i v7 V, z3 ]
- MongoDB\Driver\Exception\InvalidArgumentException, g: C/ S$ m3 h/ O
- MongoDB\Driver\Exception\LogicException$ {0 n" O" [, t* U( L- }; W
- MongoDB\Driver\Exception\RuntimeException% W! E- Q8 c: {6 G8 u
- MongoDB\Driver\Exception\SSLConnectionException
4 P% h: [ q. F% ^/ { - MongoDB\Driver\Exception\UnexpectedValueException
* }3 k- \/ L4 A# q2 [) ?& z - MongoDB\Driver\Exception\WriteException
复制代码 # C: T ~2 e% X
7 n4 Z$ ]2 h8 m5 q/ ?: t
) S+ u; Y6 c! O, }! e+ n2 ?/ P
点击查看全部3 A. [+ X# y; h1 M' J( r
5 _$ V3 V; b `- c# x% S0 q
2 F" ?: _4 q1 `0 I% _* |( u4 w |
|