管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。8 F( u: u1 O1 \3 _6 h) U
$ n9 o: m8 Y9 V/ j+ r下面用PHP7新的API总结一下:
3 b* W$ f8 a) m! f0 H4 U1 I' |. w/ ?8 N" B) Q5 U
一:CURD* ~; X5 F: `/ X6 h: L8 b
0 N' y R! ?) v1:链接, ]1 R/ ?: T8 P( D g& b1 |
: C3 o) q7 {+ s7 Y8 o- <?php
7 t, t: ^8 N7 e. | - //链接mongodb
: @) }9 q1 o. k6 Y - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');3 f3 j( q1 p6 V( U: c
- root 用户;123:密码;如果没有密码则不写
复制代码
$ N, a$ x/ [4 u& A4 I4 ]- d/ `# E- Z0 g7 r+ {
2:查询4 Q6 D" y" m. x8 z4 G' S
W: n/ k* V: K' M3 B7 W
- <?php
, X; {' g- {8 A; } G" E - & k/ o2 w9 A9 n Z) U0 T
- //链接mongodb
# S$ c3 J/ G4 @9 R( a U - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 |+ L0 D7 c- w$ _, s
]1 V' D: ^* U: }+ T6 G9 _- //查询
8 h) M/ t3 e0 w) O - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0& |8 o' D% @ C) x" q: V
- $options = [" U( H1 D s7 ^" {" r4 e9 G5 \' W# O
- 'projection' => ['_id' => 0], //不输出_id字段 @' n+ ]" n( ~; H# b* \
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
- g @& @* K! Z. j% ? - ];
# ?/ r2 @% j y8 H - $query = new MongoDB\Driver\Query($filter, $options); //查询请求5 B' k4 \) a4 K& S% m
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合% {1 t( n: ]& ~6 z
- 9 c2 ~1 q* @# u2 [( o7 ^
- . w( m8 U! Y% p9 o9 F! n
- foreach ($list as $document) {
" e4 m& [/ ]$ J4 _8 C3 Z8 { - print_r($document); 0 c& G3 h1 U& w' Y
- }
复制代码 1 d4 T! A( r/ `5 R. F8 P
查询更多条件使用方法,参考第二节mongodb基本命令,查询
* F* ]% ^' w- U& k6 C# Y: v! Q7 M# Z0 G2 g
3:添加
) A6 N) `/ R/ x+ N1 G5 V: X" B9 `+ a3 \- ]7 T: ]. ^5 B2 F
- <?php
3 ]9 X+ k2 W. q0 e1 u - ( K) Q8 Q! a4 g
- //链接mongodb
5 T8 D3 x) z, ^ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 _: ~+ d* u2 G% o- X
' ~) V( y/ P6 F# C5 c- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
H) ?9 b3 g% B& J# ~! ? - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
{3 C$ n6 t- g5 A- G e - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
2 J! \, \! H8 Z7 w) Y2 v- r3 o% ^ - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
! L- R; A/ Z$ ~/ z5 }4 @5 m& y - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, Y. j9 o e" Q, v e; B% M' r- p* X4:修改
* x2 P1 k( k3 S b; H* B* a
! ]9 I1 Q Z( t& \+ z- <?php% e( D. ~1 b% ~
1 ~% c s: {. E0 w5 C- //链接mongodb
# G# h' J9 k9 J, i - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: `( m0 \% ]% {8 W
- b8 i: \ t$ _. V+ e h" B% e
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% f; h8 Y2 D8 M f& `: C
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
& J& k$ S4 z( r+ S) Q p - $bulk->update(
5 Y9 d+ _* n+ `$ C - ['user_id' => 2],- T- i" k% s" o
- ['$set'=>['real_name'=>'中国国']
/ y" b3 h/ L7 L4 ^4 B; A0 K - ]); 9 R% A1 L% d8 q! N
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,1 G( M/ a+ R4 O: i6 H
- //1:字段不存在会添加一个字段;6 d' r8 u6 V2 H" l* ^
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert! k" I6 p/ k' i! d! T
- ( S( E7 q3 E% S; |4 l2 b5 T0 m% ^% `
- 1 S- _" t& o$ g7 i. z$ D, M
- //如果条件不存在不新增加,可以通过设置upsert; y/ C3 U! W+ ^! s
- //db.collectionName.update(query, obj, upsert, multi);& t$ Y D- f3 l, m
5 v% Q& N* ~$ u# ]0 D% d d8 @- $bulk->update(. c$ {. K3 E2 C) X5 x( z
- ['user_id' => 5],; h* m% Q& y7 T' q2 [
- [
. W& n1 \$ `8 a- o5 A& G - '$set'=>['fff'=>'中国国']
' _9 Y, E- ~% j2 c9 i - ],
2 M( T$ e1 M& ]* h7 [+ Q& [' [/ j - ['multi' => true, 'upsert' => false]
% l+ M0 e! h6 w. y, E$ K - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条+ ~" c/ S O( @
- //upsert为 treu:表示不存在就新增) ]( R7 x$ L: a' C
- );
8 p% _6 l+ F2 W4 e* h1 v" m Q+ \- A - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 $ ^+ X7 P: I6 k* _ L8 N
4 x* i' c- Z# ?* D, ?
ordered 设置; N7 H V) [4 w" ?
0 X6 E) b+ t9 B1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
/ a9 Z3 p9 n+ L z0 k2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行" d6 A; E% W% K2 ` b; C) t3 J
# _ i! d$ v8 I( g+ D0 z5:删除( g& G- A8 u7 p# l4 i3 D; t5 r9 n
1 l6 n2 [5 n- x7 \) ~( h
- <?php2 D. C. r- v5 R$ W9 s$ C7 d
# F. w+ G) f' q" H% V( P* H- F- //链接mongodb8 a7 H/ A' E' K5 A( ]
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ v X" O. z8 f/ R
. w6 U) y; i5 T. ?: l- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行* F9 R' l1 `# n" M9 ^
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ p2 } H( u: }9 i/ |3 y& M, k - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段7 Q1 u, K$ q' \; W
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
5 p* R: j1 k, a6 g9 [8 t - delete还可以通过limit设置不同删除方式
9 K, ?# C1 u: \/ B - 1 t$ ?" O; m3 t" ]* K7 Y
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据, w$ `2 c! u3 a$ X5 I$ p
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 7 t% L6 i' o& d$ ~/ v
3 |4 X! r. W0 U ~( |0 k
6:捕获异常5 n, J$ u- E7 d. F) r$ W2 G( l
% j% w- C- Z+ ]# X2 _) S! Y- MongoDB\Driver\Exception\AuthenticationException
. Q, `, v4 w: r* v/ M - MongoDB\Driver\Exception\BulkWriteException0 f4 o% N4 ^; }! Y/ F, T7 \
- MongoDB\Driver\Exception\ConnectionException9 j6 A3 r" A% A' T1 z
- MongoDB\Driver\Exception\ConnectionTimeoutException
& S% O$ F, W( t9 b7 D - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
2 D4 q5 _1 s' u4 Z. L - MongoDB\Driver\Exception\ExecutionTimeoutException
9 e+ D6 ~; O2 }" `( S9 o( J( Z - MongoDB\Driver\Exception\InvalidArgumentException, Y2 x: }; t& O) T# ]! X. D9 v
- MongoDB\Driver\Exception\LogicException+ K9 `5 n9 r) y; t' m9 _
- MongoDB\Driver\Exception\RuntimeException5 }' k% m1 U% p; d) j1 z
- MongoDB\Driver\Exception\SSLConnectionException3 o$ L) T- \2 `
- MongoDB\Driver\Exception\UnexpectedValueException Q1 `5 Z' M/ Q' o6 _; i9 @. H5 q
- MongoDB\Driver\Exception\WriteException
复制代码
) C. ~& ~( N" Y: b
7 r( H, Y9 w( Q2 I! V8 U7 A1 D3 _6 s7 R7 ]8 u/ X
点击查看全部
) ?% y, @/ h$ d' ], m4 B
& E; A: o* v4 `, B# @6 D
# o+ v" y( C% { a |
|