管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。* y8 ]7 I' n6 u7 a! R( K
0 G+ [* R2 C, S5 w' Z下面用PHP7新的API总结一下:
? Y- u3 G6 F( b' H1 [ @( p
& }" F6 {2 N6 N7 d$ D! F5 p一:CURD
5 T6 v- D( g0 m5 U% u
$ ]. d6 p+ g" z# k1:链接
2 o# W7 v6 K5 O- D1 L
& R+ U; q' f% t5 A8 p- <?php
, t/ Z- G) k1 v - //链接mongodb
( G2 I9 ^1 ]! b( H" C, k+ X - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
) p1 H4 ^( y. M. s - root 用户;123:密码;如果没有密码则不写
复制代码 ; v- K0 i) B9 x
7 P% c/ d+ d4 i) O9 ]
2:查询/ s7 n- a. a/ J( Y1 g p1 B6 o
! l3 L% n6 `: v$ [; Z# C
- <?php
! F/ O8 c# r* O4 F: x m8 ]3 F - $ V4 W/ P7 T& [$ j! _
- //链接mongodb
2 A. o3 ]5 ~6 t3 H5 i# l5 f - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& Z6 L2 Y# F; O
. J1 }6 s' i1 W7 w2 g$ F& \- //查询
7 N, `+ f" ~; t' @5 o) p - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 S5 }: g( M1 q" w3 V: k6 @- }
- $options = [9 @' n' x7 G( X4 h# B
- 'projection' => ['_id' => 0], //不输出_id字段
9 ?# I8 g3 d- l3 `* U - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
2 J3 A3 _- ?) L4 M - ];
: A% {6 g( G. I2 X - $query = new MongoDB\Driver\Query($filter, $options); //查询请求' I* @( ]% K. z3 x# a N9 o6 H2 y, ]
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; }0 F* n9 g) H- K
- 9 D, V2 E9 T# B, [
$ i* d# Q$ z1 Z: S- foreach ($list as $document) {) J% |2 `' H# ^. G# B* {3 s
- print_r($document); % v; e ^& \, \2 _) @/ a
- }
复制代码
9 ^- M$ o4 e8 {) [ Z* x* \查询更多条件使用方法,参考第二节mongodb基本命令,查询 b) e; l h2 E7 U
8 u( Y) w" O$ A
3:添加( g5 O: M: r- r3 L1 l, {
( F F( S) C" ~2 m3 S
- <?php
& s% I# I4 z3 Q
/ A/ v+ P, S {) b- //链接mongodb+ ^" O/ c. {5 x& U1 z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! \1 b& x, U, @: P6 P8 M( [8 b
; `9 A( {7 }- ^) {$ n# z( B- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& y5 C- X4 m' _; j) {. ]; u7 O3 a
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
) ?8 N: k' s: Y" ?1 [ - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);0 p& o, i& ?! C3 J
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
R" E B* \4 u7 A* o - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
2 p" h5 F7 X+ p3 N. C4:修改. E' g3 l) M" Z. h7 X$ y% G
/ g# s8 k/ \4 Y+ Y+ [+ X1 B( V- <?php
$ _# X5 d# |: y1 _- B N. R
# I0 J( ^2 p' T0 P; h! a- //链接mongodb8 R" u. B1 G. d/ w, Y
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# C/ `/ I1 l4 y0 x1 E+ L* M ?/ M
2 U2 e3 j- J+ T# S- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
8 r6 [! f, R( n5 T1 t: X9 B - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 t. P J6 R. \5 G. J( L) h
- $bulk->update(
3 b8 Y7 A9 ^, v& a7 ` - ['user_id' => 2],
3 @2 L3 B% t! k2 |* |9 Q: ^% @ - ['$set'=>['real_name'=>'中国国']3 s' ^) t+ e8 Y1 T. o
- ]);
) @6 a! ?+ S" S; w* L% j - //$set相当于mysql的 set,这里和mysql有两个不同的地方,+ W( P! K: l, U/ H0 K3 A
- //1:字段不存在会添加一个字段;
# X0 C0 O/ k7 a - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
' E+ g6 ^7 Q- u( A# f1 l7 O9 v
. c5 w" v4 ]0 R0 K) t r- 0 C! F& q7 H* f3 O4 D9 P1 A
- //如果条件不存在不新增加,可以通过设置upsert! X7 X0 w0 Q, A7 s, q+ \( a/ J3 V. O
- //db.collectionName.update(query, obj, upsert, multi);
" U" Y+ X. I- o - - E( ^% e8 Q1 v! M# X3 M8 f
- $bulk->update(7 l$ c3 ~: w: f- U) }4 B8 E+ I+ p: G4 Y
- ['user_id' => 5],
/ X* N8 V" q, k, C) r7 |6 b - [$ u* `+ Z4 |4 k
- '$set'=>['fff'=>'中国国']4 R- ~' e# F3 ?* Q' h
- ],2 A9 O* \9 d- \4 t+ X8 m: v% h, R. t
- ['multi' => true, 'upsert' => false]
2 s$ S) I0 `( ~& C - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条! c3 D% d) ?- d& ?& @" D# \
- //upsert为 treu:表示不存在就新增
9 j4 r+ P# W% i) m' D - );1 J- f" w# q, K6 h& H, E; V
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 $ H5 D m+ c, |* @ P
* [, G% o+ `# v( g( Zordered 设置. F/ Z# @' Y6 k$ c2 [
2 T0 l* M+ [9 D1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
7 @1 r& m2 J: p7 t+ y6 y2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' y, |, ?3 n p5 q, \
f* }/ @6 o. a7 |& J( p) ~
5:删除
! ]' J0 p3 i# [* ]% f
( {0 j8 x; ]1 Z; H9 Z% D- <?php) M. T7 ^5 ^5 O. t* l' _5 N/ f
3 c. U( o+ t1 U1 _3 N- //链接mongodb$ z* Y& u8 i7 d3 `* u
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) ~! i; L) p& q& Z6 H
0 b( L* t7 G R0 k [% N2 Z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 p/ |, l& r0 k) x - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* |+ E, q9 U, a7 z
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
1 J) m4 Y: A' { - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* ~' g2 P/ B! f1 J9 W
- delete还可以通过limit设置不同删除方式
1 d) I; }1 K% q
/ |% V; F6 `- @2 z! k% Z- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据4 X2 W% {, g4 H* [- r6 J
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 + |4 X# Y; l. h$ O4 Q
% _9 d! O& v O
6:捕获异常8 |1 I5 b7 {6 V
0 g3 I. \7 K6 V7 j5 \- MongoDB\Driver\Exception\AuthenticationException
i6 Z) _( Q1 D" l1 k - MongoDB\Driver\Exception\BulkWriteException
; U& ~0 R7 C( S) v6 b1 ^/ J - MongoDB\Driver\Exception\ConnectionException ]& ?( e& V% U0 w3 X2 p4 ~6 o
- MongoDB\Driver\Exception\ConnectionTimeoutException
- ?" z" w' G' D3 G: q- Y8 q - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
' X' R" d }, }, Z - MongoDB\Driver\Exception\ExecutionTimeoutException5 R( y6 w z6 z0 h( g
- MongoDB\Driver\Exception\InvalidArgumentException$ I6 ?4 V4 U- _7 Q5 G
- MongoDB\Driver\Exception\LogicException9 H0 k3 J o% l) v6 d
- MongoDB\Driver\Exception\RuntimeException9 ?9 C. a: t& r0 @ j
- MongoDB\Driver\Exception\SSLConnectionException
1 L* _. o" I7 r+ |! o - MongoDB\Driver\Exception\UnexpectedValueException6 a9 v# h- X6 X) \; H( A
- MongoDB\Driver\Exception\WriteException
复制代码
/ w$ e# y, ~5 a' G/ h4 n: W' w; `; O) s+ B+ g$ w
) T g# ^0 _$ {9 }2 d
点击查看全部
) d- n5 i% M+ t* [" |4 u, [2 l$ T. @; G: L# W. u: A
* K/ G# f' q2 N! Z% c$ J |
|