管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。% P$ |7 D3 S3 R4 D- T0 H A
4 ^! t1 i& M G% \8 `- t! s/ ?下面用PHP7新的API总结一下:' S7 h0 j6 p' w' K
( N u, d* w8 L% ~) e
一:CURD% O; r9 X& u9 R6 o4 d2 `6 h5 @7 I
/ Z% }( i" y- y5 T3 i1 m1:链接
5 Z' i* {6 g3 }/ Q' A
4 F$ j: O% X7 \, `- <?php
) T( Y% ]- S% S# C$ E - //链接mongodb
v+ X2 G) W7 `; I; Q* h: l' C - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');$ c% P k% J3 J4 O* c
- root 用户;123:密码;如果没有密码则不写
复制代码
! ~, O# }' T+ ]( r& K$ c( T# N& P, M. }- G/ _
2:查询
h9 Q+ \: r! t) z& A; v8 o& v/ n7 q$ a4 X2 W) Y9 L
- <?php0 n9 V9 Y. b: S1 ]1 @6 u; d8 s
- 8 @7 i8 o# v9 `0 P& }7 h0 u
- //链接mongodb, k% l2 A: G6 H1 @( `" o h
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' n* H* f' [' z7 V6 @4 R. s/ r
' C7 C5 a2 q4 Y# R7 g- //查询 |7 F$ f6 W, d$ ?" i, |
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0& P* `* e! W+ m5 t+ k
- $options = [
. B( l" n! _# Y" a' W: y - 'projection' => ['_id' => 0], //不输出_id字段
4 U5 [0 c4 `, {8 [ - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序8 ?4 |' N5 F# I# @
- ];
) R! p! x- F8 M4 ^, t! X - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
8 K* H% @7 H5 I4 z; L6 G$ U - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合$ o+ _: I. O3 _2 S, f" l+ z. \
2 [, W8 t; q/ R' Y8 _
$ N" b& Z; _3 @6 z( \1 p- foreach ($list as $document) {0 [& Q, Q* b. |% S* E" m( W
- print_r($document);
! G. p q) w M3 s - }
复制代码
1 x3 U+ P' a6 q: j; O* `查询更多条件使用方法,参考第二节mongodb基本命令,查询/ y% Z# W' e/ b: ?) v
$ v3 D- _5 n# s. g$ z5 ~: p3:添加
0 y# ~: }' A# }9 ?# V
7 I2 m! r8 j1 N9 j0 x- n- <?php$ y2 K2 n- p' G+ l" v
- 7 p8 q- R1 _0 S
- //链接mongodb: _7 x3 ~, R' [" T3 F
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ U/ p0 i, }" e5 `2 c
- 0 p0 }, F! z# U) \
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行* y+ f* R8 g) _0 X% }
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, _ U' v, S8 t$ n* w) X! i1 d
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
; Y: P+ x, ^2 I5 Q3 A4 d - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ r" {: [+ p5 o$ p
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 I1 v: v/ i0 N4:修改
) K' A0 V+ o# u- P8 h0 K9 ^7 A2 ?" W, ^, a9 O/ j+ X+ C$ s
- <?php
6 y8 @6 A c0 z) W% G# R9 O8 u
# O' |/ e5 i5 |7 b) N- //链接mongodb
! E. W6 j" }3 a" a$ U, ?/ G* p - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
[8 x- r6 \3 c4 B
: ~8 U8 ~$ z4 s! l9 ]# B# z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行: W1 T2 f* D! ^) F$ |: R
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
1 ~* F: m# \; c. n& ?" G - $bulk->update(
* e4 L. |. V+ ~4 V: P5 W - ['user_id' => 2],5 C: z& C# e( s4 L4 w
- ['$set'=>['real_name'=>'中国国']1 r" ~9 r) v. Q/ U& M7 o
- ]);
9 Q# l% ?, X/ N - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
7 t- W+ N6 E) V+ b8 P+ v! a1 ` - //1:字段不存在会添加一个字段;9 Q! D% w( ~0 L: q4 U) ^
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert) c: S, Y3 T9 P2 W
) E+ G l" g% f' [$ }0 U9 R- 9 u; G/ \% q1 ]8 ~5 ?' F
- //如果条件不存在不新增加,可以通过设置upsert+ I' d' F O3 d) J; c
- //db.collectionName.update(query, obj, upsert, multi);
3 w& \" {0 y/ q; A4 }2 G
; Y$ l1 g8 z9 I$ A6 I9 ?; `9 y5 u- $bulk->update(4 V( g; |- B. r5 W" D! r g; a
- ['user_id' => 5],* X( z( m+ N, o4 H8 X* l
- [9 E6 p$ c8 p& C# Z4 H& t9 ^
- '$set'=>['fff'=>'中国国']8 }% X$ T l4 P
- ],
) `6 E9 m5 M: u/ v% ` - ['multi' => true, 'upsert' => false] 3 h: K+ H4 y1 n" }- Q" M
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
. n+ S" a4 d5 P; b; M. [2 v - //upsert为 treu:表示不存在就新增
1 r6 _: S! {5 y; {/ e - );9 \! x8 I9 W1 f3 H2 x3 l. M
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* c* ?! h) n. {) }
) s# {7 u! b7 }ordered 设置" T0 z+ p3 m% R
" ? U: s: d* D( T K
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。. _$ a6 z0 _* U
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行3 r+ `& l4 b" y2 l9 ?: P
& g+ k. L( G, z8 n- P2 A) q, \ K
5:删除
& S( Q" T0 U w5 J( ?7 {( y, M8 j+ a
' y5 h# H" `0 d- <?php( k! I# o* T3 K* ?5 H- V' M( b5 T
+ g! S, A" ]+ V& c: L( K- //链接mongodb8 v) l# H3 Z: E0 S
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
* y: E7 I! k. @1 P
) }# y, P: p3 z7 l4 h1 t2 r- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& D* z5 H" n7 m
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ H; L: D$ X9 T
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
) ^( K" U; h6 ^" X' j1 X - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
/ _, O- i; \: c( C3 J - delete还可以通过limit设置不同删除方式
% \: s' A) G8 }; _1 Z - & J( o0 ~. h3 K; S
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据8 g9 x$ G8 t# u7 Y3 r0 w
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
: {9 l9 x3 B# \ }1 D' C; n# N6 o6 t4 h( c. Y" Y' q
6:捕获异常- m5 d$ Q# S3 E) ~. l; E
5 K2 j+ P. W3 g' W6 H- MongoDB\Driver\Exception\AuthenticationException
0 f1 ^1 o% y% V2 }5 P4 p' r - MongoDB\Driver\Exception\BulkWriteException
! q; p% ~8 `3 A- M; \ - MongoDB\Driver\Exception\ConnectionException4 s# ~) K3 w6 f" ^& Y1 ~& P+ R
- MongoDB\Driver\Exception\ConnectionTimeoutException6 v C$ s) x% a2 ]& s% v
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
% u' A2 _# c2 }- C$ r+ o5 S& w/ `) a - MongoDB\Driver\Exception\ExecutionTimeoutException
6 k! \8 l1 F. W5 C - MongoDB\Driver\Exception\InvalidArgumentException9 O4 U6 I) _. @( y+ x- [! A
- MongoDB\Driver\Exception\LogicException
_- N6 C, T+ R, C - MongoDB\Driver\Exception\RuntimeException* P" S: a9 S6 i; x. o
- MongoDB\Driver\Exception\SSLConnectionException
, {5 p$ o7 v Q' Q \ d+ H - MongoDB\Driver\Exception\UnexpectedValueException: W/ g- b+ A9 o: v A: z
- MongoDB\Driver\Exception\WriteException
复制代码
& H0 q, m7 \$ m9 d1 h+ R/ F7 m5 @$ B
0 v3 e' U( ]( Q- \% i$ E5 V6 p
点击查看全部
+ X3 @2 ]# h! @. f
; t7 X5 R0 L9 h' |* M- ], G6 l& }
/ c; W6 h5 G9 @ H |
|