管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
( X9 E0 C+ b9 u) @, |/ P; C% a) y2 y, }1 Y x: L, }* G
下面用PHP7新的API总结一下:# j( E9 |. w" }" ] W# o" K3 J
0 g9 b v: A, N0 n/ U2 B/ l一:CURD3 w0 V1 \$ _! e. T* Q$ l; @$ q
3 W H9 r [! h& ]: q2 e3 L/ z
1:链接
' p$ P. y0 c. \. U/ |+ ~6 z- C7 i1 \
- <?php
- x& g6 V+ v6 z, J - //链接mongodb2 {: N( T: Y; u; P& ~3 X& g [
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
4 d# e! p% T0 P% h5 k9 g - root 用户;123:密码;如果没有密码则不写
复制代码 0 s3 w, E( f" x# ?% S3 y
0 G% R; H1 O3 V m2:查询
1 u2 Z. _9 v* W/ o) o6 A( K" s/ k6 X2 S
- <?php$ J0 f' F: y5 N$ ]
- ! k1 R7 M6 F( F7 A: T
- //链接mongodb
4 G/ ~" b/ @0 M - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
@: g$ i$ o" |' m" X
; j3 u+ f+ a4 p. R8 o. Z1 i8 x8 K5 a- //查询0 L% T8 D# ?7 B c* d
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
% c5 ~% M" }) Z - $options = [
+ v0 w- P" D r7 Y1 D" l - 'projection' => ['_id' => 0], //不输出_id字段
/ d5 x4 p: D7 b& _/ [7 j - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
1 D( r$ e6 V/ \, p/ s; K2 O7 l - ];
* H( A( D# m, V/ I* y$ B - $query = new MongoDB\Driver\Query($filter, $options); //查询请求" f) J' c+ G# l7 e
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合9 Z! O; Q! B5 S6 d1 G3 A) a
* U V, h4 J; r- S2 @4 E/ _ o" `' z/ b* E
- foreach ($list as $document) {
$ }$ m; u" H- R3 _' q2 D0 L+ M) z - print_r($document);
# f# O% w( V; Z3 ^, G - }
复制代码 ; A7 ~9 Y+ G$ L: U" G( e1 H
查询更多条件使用方法,参考第二节mongodb基本命令,查询
* ~: J8 S: l% z, r7 p) A! A I. O0 Z1 z& d# x7 F
3:添加+ `, v& C" H' T# J- I
' P4 ^% N- v+ C4 a: W3 J" I* {0 B- <?php* a0 s6 b: q. \3 w! y% O
- + E, ]8 o0 s2 ^) ]5 N' Y
- //链接mongodb6 G, x5 a/ B2 |) m' H! d V
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); @6 m# i- U! L; x) {. `
- # A3 l+ ^& c0 c& ]0 _1 l
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
( C- u# y2 ?# |" X. _ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
* a& s6 s# \) j2 z" t3 i% s% e - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);- [6 m; @' Z9 A$ }: ^8 W
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
% }$ X- b1 x* L, W+ L$ p# g - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 $ A/ f6 B, _ g0 I' G& S
4:修改. |1 r* o$ l3 H" x
* ^( j7 }& p" R+ H, D- <?php6 C, Z ^: [; U! i9 N
- e' P% U2 c' h; T! \5 l' H
- //链接mongodb
/ P; |( _, a& `: H! B9 J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* z# K( Z' W8 g# R2 `2 s; e
5 B6 U* |/ L* g ?) R5 {9 Y4 L- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' A5 t7 c) o( i7 D: P
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: j- A+ o; `8 u
- $bulk->update(, Q9 z. U( Y! \5 W7 E
- ['user_id' => 2],
; a0 g0 G6 H2 N( @% A7 w - ['$set'=>['real_name'=>'中国国']
n5 {% r+ q1 v4 T) R4 V - ]); - c4 q9 Q0 A7 D4 K
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
, H0 p, U" H' Q, o! S4 \ - //1:字段不存在会添加一个字段;
* H+ `/ U+ X- U! i) F1 P - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
* y9 _6 l0 y+ z, w* h - , [2 M8 Z) A8 f* J
7 W! V9 o- k3 P2 W- //如果条件不存在不新增加,可以通过设置upsert* V6 \/ q( l0 l1 y- o, q/ A7 F, A
- //db.collectionName.update(query, obj, upsert, multi);
+ {7 y f5 H% L5 e( F0 k3 c. g: l3 O
& |; C0 p( m9 b" [, J2 n) [8 B- ~- $bulk->update(9 @/ h! b. b/ C! S, c* @4 |' C
- ['user_id' => 5],
$ D2 m Y% }0 S! [1 X# Z3 C - [
: u- \8 Z( z7 P! J1 b; w4 ^ - '$set'=>['fff'=>'中国国']% z1 X# v4 u& ^. u4 M# U
- ],' k [. F7 K5 e) n6 b
- ['multi' => true, 'upsert' => false]
$ d( v6 a5 S4 ~7 l! h - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条! V, r* I6 l: X# E- c' M( O
- //upsert为 treu:表示不存在就新增
1 @/ e) [- M6 s+ _/ @! ? - );
+ \& ~4 Y+ z2 Y0 M1 Z8 F) f - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* X, y& p) G, r7 W. I* o6 [+ R( r" G0 K7 b/ U
ordered 设置, i i; d: J9 @; q5 ^) A
0 t* u G M4 h' l s1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
/ l, `3 F( r: _& Z5 v2 |2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行" |, F9 \$ ^' Q4 K. [( Q
; L0 m7 H) g7 f4 R' c I/ Y: O) T) D
5:删除
; E, x* ~+ _% l( N( y8 a, C7 V; }/ i6 H) u5 X
- <?php
# O4 v) H; V3 R3 l! j( i
$ F8 }; @1 k9 {- //链接mongodb' B( {! p; n! x' v/ r' o, ~
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 v9 t) ~2 Q R7 W
! c3 e6 O v, C# x8 }% _- P- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行! W5 h8 j& s5 s1 V* o. {) H
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- t& b# x0 `5 X8 S' I4 N1 L - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
8 H" A; l$ c3 Z- t6 } - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合' m) N& u* l, A) c" B
- delete还可以通过limit设置不同删除方式
9 B/ W# E- m$ |; x
" O) ^8 \. Z4 F7 b @( E- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
2 e- A2 z$ r8 E& u/ D" t - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ I9 ?" y7 S" o6 y( |' @3 L. Z9 T, [- h$ W$ j: A( v8 @0 T
6:捕获异常( W' O, B4 { c$ L( x1 c
. c/ O6 `0 Z2 K, H- MongoDB\Driver\Exception\AuthenticationException0 X0 h% t% N4 f0 |6 I
- MongoDB\Driver\Exception\BulkWriteException
, ]9 v8 w3 |* b+ w& X3 W# Y; l - MongoDB\Driver\Exception\ConnectionException5 r9 L1 b$ }& R/ L
- MongoDB\Driver\Exception\ConnectionTimeoutException0 D, P% f+ W7 X6 }+ j/ b; U
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
2 j1 G6 J' s0 ?6 V - MongoDB\Driver\Exception\ExecutionTimeoutException
5 R/ i. Y. y9 j+ c0 s$ G4 h - MongoDB\Driver\Exception\InvalidArgumentException
- l+ r$ r( Z e5 l6 a - MongoDB\Driver\Exception\LogicException* y5 M7 b- g+ S8 C! H5 L# J7 m+ W( J
- MongoDB\Driver\Exception\RuntimeException
s5 b1 n; i/ e$ e6 b* p z% J - MongoDB\Driver\Exception\SSLConnectionException
2 I. t. h5 D5 f! G0 `0 Y - MongoDB\Driver\Exception\UnexpectedValueException
$ q3 \. j7 K- _! G - MongoDB\Driver\Exception\WriteException
复制代码
6 F" F, m, ?$ y4 t2 T) a9 M, W9 k6 }& n
5 @* K0 i6 G' i+ t+ j5 ?0 Y
点击查看全部* n+ X7 d6 m) d7 s2 y
% K. o- q* v8 D& A( K u Z7 C: m! s) c9 F3 Q4 u4 ^
|
|