管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。$ A3 B' t' a6 D
7 C( K6 _9 w/ i. {- U+ G下面用PHP7新的API总结一下:
0 |2 M% U9 m7 H |# E% M7 ?1 I/ \$ D8 _8 H2 t8 [$ a/ k0 D
一:CURD
% w+ J% E4 n$ D2 k5 b$ l. O6 K9 X8 K+ Q
1:链接- |. O+ ]. Q( D& v. G. E4 N
" r8 U1 I! L- `% I7 f' j- <?php
( n( A5 a6 x' n$ Q$ ?8 u5 H - //链接mongodb) C& }: s% j+ W' `* y
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 b& z* V7 n: c( \4 `- O$ ^
- root 用户;123:密码;如果没有密码则不写
复制代码
/ ~; N* k5 ^0 j7 k6 v. [2 F1 u! N' A0 v- v5 u/ h
2:查询
4 P' z0 f0 ^" }3 q2 R- y* H) g( ~; R$ r
- <?php2 \3 j4 ]: \2 q' a8 e
- 4 p( l2 g7 l. n
- //链接mongodb% X3 F* ?7 o# R8 |5 L' Z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" G' m7 P- D: S+ i
- % |0 \3 Z# u* Z9 w& ^. D
- //查询
; }/ F( _& m: W7 G - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0+ d* q' ?4 M6 b" _( U& S
- $options = [
; q! u' M/ Y1 x) e1 u! f- q - 'projection' => ['_id' => 0], //不输出_id字段
* D" e0 Z' c; R6 S' Z - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
# Z# C/ ?" @5 v8 F# v - ];/ |+ y' N, Q9 m1 ^4 W8 P) P
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求& E) \5 U: B" e6 c7 F! J- s: x
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合& _6 q$ E" P1 N# i7 G
( x7 f. v8 C; D# K- 9 S: n: e' p* d( V2 c: X7 [
- foreach ($list as $document) {
: T R' G h y7 U" K7 i+ a - print_r($document); - f G# p" @& ?" [
- }
复制代码 * P9 y# q" I) `- F$ s
查询更多条件使用方法,参考第二节mongodb基本命令,查询; R* I6 @, `$ J: t8 x% U
1 k: W+ n( S- ~ g" X3:添加7 R& Q; K7 k; Y
% |: e' N5 Z/ F2 R1 r# L% E- <?php9 H; _! N2 H% Z1 g' e' _" N
- $ c) ^; [5 L, F* Q* ]# q
- //链接mongodb
- ]& D' D! j p; }9 v1 k1 p* @8 Q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 l: _4 K9 N% R1 j2 T! M- X
- " ?: @8 O9 j% k) N8 @7 B
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
/ ?: D# o; w2 q* A: ~- B% F - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( L" Z# H2 `2 r% d6 B3 s6 M
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
! K4 F$ |' ~) h: i7 E - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
) F% [3 h# _2 `! ?& _7 q1 L" b' L. J. k - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 + X" E" N* b1 ^, W. k
4:修改
& s% e& Z) F" c$ i2 g. j- L
4 Z1 Q' |" t; n- \- <?php
Y# p* j" d4 Y5 }0 }
) Z1 H8 k$ V* b( Y. Y& c9 d* \) E9 f- //链接mongodb" w M- Z Q/ n+ ~+ P
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 d) w: S) b* s - 1 Z, W1 ]7 p( h7 b6 f/ D" f
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
" R& Z4 R. N, ^) X) | - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! w; B8 Z- s6 {+ P' D( n' d, r2 p: V% m9 O
- $bulk->update(9 P" p( E$ C( K3 J% _
- ['user_id' => 2],
( {0 c7 U8 o1 @7 w$ Q - ['$set'=>['real_name'=>'中国国']
, {0 _. L: `. R6 c4 T( ?1 x! V - ]);
( b. R H) T# N! P, ] - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
- X& x, F% J% @+ [! ]1 d) i - //1:字段不存在会添加一个字段;; U: ~ J' E0 g7 s: u! L
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert. _- S. X E" G. h' z4 p9 \
2 H( ~0 S3 q7 p( D- F- 5 x4 W q; s" H/ G: w
- //如果条件不存在不新增加,可以通过设置upsert
& @# A" i' s( @* N& \ - //db.collectionName.update(query, obj, upsert, multi);
! F: u9 m6 v6 U$ R8 X5 V8 X! W3 A
# b% ~8 Z/ @( E; P4 w- $bulk->update(
` J# Q0 F, c+ U. t' c6 _ - ['user_id' => 5],
" w* a O) h& ^6 N& }6 O - [, I K' c# j3 e+ D6 \# r
- '$set'=>['fff'=>'中国国']
^7 y" N! s2 _$ Y - ],! w# C1 M' w9 S9 J1 k+ U
- ['multi' => true, 'upsert' => false] / n" l5 C. J/ m! _/ P. `3 P
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
7 q- c- Y4 C* U" ~0 Z: ^! W; C# T - //upsert为 treu:表示不存在就新增( O/ B; j4 s% X/ y/ i- h% m* x& q' B
- );( N- r( J7 h9 E) \8 s8 H
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 o* _; B3 X. v' k0 @+ d
$ t' A, J% B! _6 C; ]ordered 设置& x- g2 p9 U$ y: }4 ?0 a" {6 C
* N& N$ C4 S. x
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。( s1 L" a$ @+ j7 D& A- I1 Z5 p/ F! ? ~
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行. R9 k' z7 l% @7 w5 D
7 m2 d# X( J+ b2 y& V5:删除
# r/ d: g$ d. e! H1 B1 u$ G* q+ W1 y& P% l8 }
- <?php9 ?, }( a% d; \7 v1 m+ q) R
- - n2 A$ l6 m: X, _
- //链接mongodb
/ c5 G* r5 [7 z$ ` - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) d6 ^! i% e: k$ `+ W - ( [+ p8 E- R" C
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 U2 x" h1 A4 u. u* g4 \0 s" s - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- M& \$ W/ j) W% ~' ^7 |& }
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
2 Y H4 {7 s9 c$ v6 n - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
' v% P X! A7 @5 \- d - delete还可以通过limit设置不同删除方式0 G# ?" C% [7 U9 P4 K K
: R5 C: j1 s% G- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
0 F- X7 K+ D3 l4 I - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 ' a s; |/ W8 f. c" q1 ~6 L/ o6 k
! M7 Q+ i+ n* A. u7 ~, U+ b0 ^6:捕获异常/ d+ O2 }2 N+ E
' p6 a. v- z* A6 P- MongoDB\Driver\Exception\AuthenticationException' f. N7 _8 [; @3 E0 E
- MongoDB\Driver\Exception\BulkWriteException/ {4 A, K5 x: U( V: f
- MongoDB\Driver\Exception\ConnectionException' X$ x& Q, C. x& s
- MongoDB\Driver\Exception\ConnectionTimeoutException
( @2 D4 X. c9 R" J - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
0 N: h9 n P) ]2 n. b - MongoDB\Driver\Exception\ExecutionTimeoutException% \$ m+ k% S, m# @1 A- \
- MongoDB\Driver\Exception\InvalidArgumentException7 W O! U1 v5 y% ~* e
- MongoDB\Driver\Exception\LogicException
, E5 K' Q" _4 ^$ w8 J - MongoDB\Driver\Exception\RuntimeException
- D/ Z2 z' f3 @, i$ H1 Y/ ?4 ? - MongoDB\Driver\Exception\SSLConnectionException& u9 e5 D# n0 f( J
- MongoDB\Driver\Exception\UnexpectedValueException: u3 ]+ }+ Z' e, X) Y( Q6 _) H/ p
- MongoDB\Driver\Exception\WriteException
复制代码 ; y# N7 G; @: y: h+ B% D/ {% _9 V3 N
8 C! z& C5 p* l: Q: [3 v7 v: y
- o& n' o' s o& i
点击查看全部! L1 p1 Z- y4 Z
% Y) u; T# ~/ K& g4 J
5 Q/ G% `# P1 S* @$ Y& E
|
|