管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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" _$ P, [8 e- J% z1 l% n8 K! S) A! y4 | l9 E, ^& U
下面用PHP7新的API总结一下:
3 H: y6 I* j% R/ a/ j3 w- ~) R- ~* g9 M) A% j8 q
一:CURD
/ P3 W, E' L+ W8 `
% [5 p: \2 ^+ I4 T& _$ K6 R' G1:链接
3 q! c$ _( W3 G4 x) {1 h+ V/ N7 |' O9 X. {7 B6 L( c/ [
- <?php- }# ` [/ J. N
- //链接mongodb
+ J( f7 G0 U. }0 p3 @+ g( k - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
! n/ P6 M' q* E1 S5 C7 u# x5 }. D - root 用户;123:密码;如果没有密码则不写
复制代码 6 S2 ` a& e: u( R% d2 ]; Y( z
: C2 Q8 l' p T6 G1 k- q+ }+ i
2:查询, A/ v+ Y: s6 b! c* G. ~0 w
+ ^- k2 Q* B0 i# m8 Z$ g% p9 j$ ~" N- <?php
) L% L1 B7 U4 w/ g6 p0 }, w! m# P
" g3 i, J# X! `4 l! J& Z/ @- //链接mongodb9 f. z+ W. M3 V h
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 N, e: ^2 ?+ y/ l - : J4 ^8 x x2 I0 p
- //查询1 H X, e. |, ^/ e3 D5 K4 l
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0( |2 J" @7 N; D8 N. X/ [7 Y p W) k& d
- $options = [7 k# O- }. w* W1 f: U1 n4 h
- 'projection' => ['_id' => 0], //不输出_id字段 H. L, Z' ?, O2 j$ N& S
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
% T, D9 }3 [& e - ];6 L6 V+ R, M4 y& h% ?2 B
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求6 c& ?+ \9 ^: |0 l/ w. m! W4 p
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
- ]9 |6 x z0 o4 Z& o4 ` i$ e
3 E* {' F8 z- P% E5 X/ ~- 9 t- d/ @# W4 m2 M9 {( M4 m
- foreach ($list as $document) {- ~+ C. T: j9 k% i$ S
- print_r($document);
3 n0 ~9 l8 v5 K7 C o2 `: N) j - }
复制代码
; F; u6 ^) J9 k# _; |' ]查询更多条件使用方法,参考第二节mongodb基本命令,查询4 w, E2 e/ o' u+ V/ D( f) Z& ~
1 B( G8 w$ U; O5 t- D/ o E3:添加) o/ n8 f) V |/ y! W+ u" B
* A- T4 q3 Y: m7 G: g# L
- <?php' ]& P# i0 f3 e$ |& o( N& L
; p3 Z3 ^/ F9 |. }# C" L- //链接mongodb! m k1 u$ H2 o# R9 D5 w
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
. T) g) x. i: ] ?- K: @3 L: ~
V0 z* s `0 W Q5 L. E- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
+ g' h7 @( q2 N0 H0 f$ v# p - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 m+ v8 j: M% A6 b0 v5 G9 Q( d
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);: p( o( h! e1 W1 j4 ^7 x6 E
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
$ n# a) N5 n3 B. }6 d7 v/ | - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 " _; Y4 g, M3 g3 }' S. Z7 r0 g
4:修改
* ]9 _* A! }6 d% q( p( o) b
3 T- y6 \2 Q2 ]: {, z- <?php3 U: \5 T" Y6 `7 U2 W' B) j0 n
- : l' y2 ?$ T( U! h
- //链接mongodb. f9 h; C l: O- Y
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ `6 |: p0 O9 [4 @0 m - + b; @5 M( F( g( N2 L' z4 Y l0 @
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
' r! ?/ ~6 r$ T. ^) I0 m - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
2 g* K1 u- f" V# u+ E - $bulk->update(0 i4 n; t6 Y; O3 C: y" g
- ['user_id' => 2],
1 H8 y2 o% l9 [' ^9 p - ['$set'=>['real_name'=>'中国国']
, M7 i7 m9 T' f! V6 V - ]); % I" S8 Q( v8 B& n7 j5 q, a; K
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,- q. i+ C) Q, y j
- //1:字段不存在会添加一个字段;/ X! r5 r- c2 C+ |4 c# F
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert$ e; c, ~" c3 b1 p8 j. |
- " e( F/ \- j7 k
- # y, i" Y7 h3 k
- //如果条件不存在不新增加,可以通过设置upsert# R5 W V* ^, s+ l( ?
- //db.collectionName.update(query, obj, upsert, multi);
[ y4 i4 \ b" ^0 E+ g - 7 h, a, y. T" x5 d+ n' ~" o
- $bulk->update(% F! f: g [. r! u
- ['user_id' => 5],
; R! D( n, c5 _. c4 m9 F: J - [
z2 t6 i) T2 O7 c* Z6 x - '$set'=>['fff'=>'中国国']
) W* E5 a* M$ D# [. r - ],1 O2 ]: x& t5 w
- ['multi' => true, 'upsert' => false] 4 H0 N& X. j' n) ~1 c0 U% O" L& W
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
9 w" u+ z J; |/ Y9 \3 h# } - //upsert为 treu:表示不存在就新增+ H6 n5 L! ~; m( Q1 `7 a. Q
- );8 W: V" m& }# R1 A" ^3 F
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
Z! i m* E4 E( a& C9 F" g6 |$ v6 U7 q3 E; q1 v) K8 H9 R
ordered 设置; ?& O6 J* I: P5 z ]
/ ~8 `% @" c% W( l1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。6 x" \9 X9 n; B# I
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行: ^$ p+ M0 b. |( _) M. _ Z
( G/ B6 |" W6 p! O
5:删除
4 M3 f) N8 L" p& d% h& d5 M% ?) U/ R8 }$ @
- <?php. k& c# c/ y" C9 t7 Q
- - z2 W* Y2 j- J: A4 L1 o
- //链接mongodb6 [/ d7 }+ u- d
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# s+ f; g( [1 h) a7 l" Q
. J) {$ K" y1 s2 t$ w' c- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 q9 G; p# W% p
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 R, z( |( w! J c$ u - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
( p0 N: L9 E9 O7 h/ W5 T - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合' Y2 r G, P7 D0 _/ o2 M7 O {/ V
- delete还可以通过limit设置不同删除方式
) S; f9 X M6 O6 f' x
. b% u" a1 K1 z& x- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
8 c3 L5 G' p: K- s( u) b& i9 H9 _ - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
3 R9 H1 _3 _! S
3 d/ s6 s( T! c! m; P( C) D6:捕获异常: x7 w& R" |1 N5 \3 k; k/ c/ X3 I: h
6 |2 {4 H0 ?; ^' r
- MongoDB\Driver\Exception\AuthenticationException
, J; p# g" X: W; U - MongoDB\Driver\Exception\BulkWriteException
& o; P- O9 Z1 h. t - MongoDB\Driver\Exception\ConnectionException
' `) g3 P0 E. u# A3 \, d$ P - MongoDB\Driver\Exception\ConnectionTimeoutException" S) q7 U2 g _, t6 ~
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口, m! y+ l1 ?+ p$ }# K" ~6 C0 O
- MongoDB\Driver\Exception\ExecutionTimeoutException$ C: p) ]9 i# G
- MongoDB\Driver\Exception\InvalidArgumentException
' ~3 X p$ ]$ @1 C& s - MongoDB\Driver\Exception\LogicException
% Y; n# I. _8 e+ Q2 p% x - MongoDB\Driver\Exception\RuntimeException6 E7 Z% o4 W# u) O1 J" P
- MongoDB\Driver\Exception\SSLConnectionException: b# n, x2 q0 U! F: M
- MongoDB\Driver\Exception\UnexpectedValueException* B8 L5 m2 M8 r, \$ O
- MongoDB\Driver\Exception\WriteException
复制代码
7 S( M1 Q0 M: r/ @) k/ P% Y% T. [) U( ^# C; k$ @9 Q
) L+ `" W: \) x0 [点击查看全部0 p9 ?" w @1 Y* l$ ]: d* o
. B+ ~: V* W7 V' D
9 w# K# t# C* H9 b7 T |
|