管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。( C. q& N& X9 S3 N
) e! p$ u Q% _9 a" @. [下面用PHP7新的API总结一下:6 q1 t6 |1 p; K, c3 j V( ? x6 B
- `7 n5 Y E5 L5 g O" d' m" N' Y
一:CURD5 P1 G J$ _- B$ D
" s& `1 e/ E: @3 p
1:链接/ H) r- p. t1 |; L9 E; v4 r
3 [) l& a) ~% i) q8 T5 @+ O
- <?php: ` l1 N7 u- G9 O" S
- //链接mongodb0 C1 ^ b+ U9 s; s( H. J0 R
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
S3 K4 p# X, @2 S3 E. s4 v - root 用户;123:密码;如果没有密码则不写
复制代码
3 ~: l3 _3 h) J8 G' B& j9 X; y. K0 U' W. f0 N
2:查询
) p: c" @( D! y7 L6 T, e2 k4 }
- <?php" I! X* {6 x' ]6 e& _3 o
; }, ?8 Z& p/ L @. a) c2 i3 L- //链接mongodb" X" m U. |. V6 V! [
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. n# f4 x7 f9 X8 J
- # l* u3 o$ \: l. v. M
- //查询4 D) L' \% @1 I, J1 H4 {
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ M. C2 L2 Q/ Q. Q! z; D
- $options = [+ Z* j, p P; [9 r' `7 I, |
- 'projection' => ['_id' => 0], //不输出_id字段# `+ G1 `# q* o& X6 g/ q: J
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序% n- K6 t! M/ L% M- w
- ];
. W0 i) o6 b3 a& N' w; Y) n0 d - $query = new MongoDB\Driver\Query($filter, $options); //查询请求* N- h; v" B$ B: s8 K# ]6 Q9 ^
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
' M- U6 J: O( A) D - , J( l7 }- Z, S! t
- 0 w( _& D. ]4 \8 Q9 m- ?
- foreach ($list as $document) {
& _/ l6 O! W7 d - print_r($document);
2 U& g! h Q# Y: r) g$ z, l - }
复制代码 : ~3 z M$ k* U7 `
查询更多条件使用方法,参考第二节mongodb基本命令,查询
' ?4 v: E; M5 v/ S0 _3 U9 e$ T0 q( P, g0 Z+ X- I! j9 i
3:添加& }# ~6 m4 S h$ g
8 _1 J! @, f; j% H! J% }- <?php
6 G" K+ m5 p+ t! L0 V0 E - " ]9 s' H# f/ w& |" K. ^
- //链接mongodb y! B7 D$ r1 x9 ?1 B' n
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
: z1 ?1 c( z8 q. ?5 Q
9 ~8 v( e0 ?' B- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, s; g. T1 R" U, A! e8 ?
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& e5 ^8 `& q# P& w/ f8 i
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
- }$ P( R% `1 u - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
# h) o* B9 H9 d! T& q - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 t* g) Z5 b! i2 Q4:修改
: c1 s r, `; X
; N: w+ h0 N' `- <?php/ R& r8 ?! Y$ A
- ; c) k$ q! I# @1 w1 @ U
- //链接mongodb" ?$ [- ]6 x5 e6 j6 s, b# m
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" P! V3 v; f; I5 I4 {; _, F
) K- `6 B* D2 X7 k/ Q' h- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 m/ K& l5 v" B) }7 G+ [
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' U% o( p4 `! h- k* G0 d1 {5 e* C
- $bulk->update(* f$ p3 T/ s' ^( ^; o0 M
- ['user_id' => 2],8 m$ b+ ~9 z8 y& q( z- p$ w
- ['$set'=>['real_name'=>'中国国']! x; `8 y6 l5 |, e# H8 [
- ]); ; K/ S2 Q7 M( U: E) N+ O% k. o, k
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,, N& m0 D: h! @3 T ~
- //1:字段不存在会添加一个字段;% g( ^) l8 V8 |" T9 p8 r
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert# q4 H/ \; e" H; U/ t
- 0 ~% w/ J. ^( Y' m/ }
- 9 ^! E0 ?! n) r/ m: l6 w
- //如果条件不存在不新增加,可以通过设置upsert4 z! m" o. r, x4 P- C# ~ q2 N6 L
- //db.collectionName.update(query, obj, upsert, multi);
! x* K+ i- h* n# R3 C9 Q5 A/ U! ?
. c7 p1 Z+ o8 X1 W+ G- $bulk->update(
" r$ }5 {# r6 L- g9 V - ['user_id' => 5],8 i8 k7 Y- S' i I w' p
- [
9 m" B- r1 R# e2 O( w* c% Y - '$set'=>['fff'=>'中国国']3 m; b- W8 G# c s+ n& ~ S: m$ p/ w
- ],
& F1 ~7 a9 s6 A9 U8 H9 T: v - ['multi' => true, 'upsert' => false] + ]6 U% |1 m" c# b
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 m2 P0 l$ G6 p& G7 q. H
- //upsert为 treu:表示不存在就新增4 q6 f; t5 i$ [# b; N; |
- );; t& A( h* \1 \# Z
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 C+ Y4 Z, k% z; d+ U" ]9 ^% j# X# _5 B$ l3 l8 O0 i
ordered 设置
! u T4 }5 a, Z, ?/ w- J. _7 B% P2 G) }: ~7 ^
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
, M1 ~4 G& j& x% u1 t2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行8 a- Z$ H3 q# ]) E- x% H
" g |4 X; Q3 u- g0 G5 A) Z
5:删除
7 e' K! r( d4 ~9 |5 l
1 S2 H' \% M# u- <?php
) O3 C& s7 q3 j+ e - * ^ P2 P1 I: [) U. s* U
- //链接mongodb
|$ F$ x# N! x; `& J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
0 b. x" `9 V$ t. q& O( a$ M - 7 s4 E" a5 t' ?
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 z3 ?- m% S9 b' N
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
2 {) b1 m# a/ Q$ p - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段* s1 v* E+ X/ M+ i: Y; E; Z( e
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
+ T* v( o% r+ r1 ~" [4 F: ^ - delete还可以通过limit设置不同删除方式; d5 Q1 L- v' \5 G% L
- _" Y/ b$ ^. b+ q+ i
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据' e) W. b1 B0 f0 K7 G7 a
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 # v! Z2 l! r4 Q, E5 T# N
5 r) f) k: r% W5 q+ @- r9 W2 [
6:捕获异常/ D# C* q" ]1 a% ?
4 M, S' r: b% ?$ T& f0 e1 u) y- MongoDB\Driver\Exception\AuthenticationException
1 q/ b( ? O" N* }2 _& W - MongoDB\Driver\Exception\BulkWriteException* f; i$ _' Q8 t. W4 s. R- \$ x1 U2 d
- MongoDB\Driver\Exception\ConnectionException
9 M0 ~$ U) M1 f& d - MongoDB\Driver\Exception\ConnectionTimeoutException
( n, P, r& y3 m+ z* ] - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口) g7 _7 ~ |/ N" W! S0 D+ o
- MongoDB\Driver\Exception\ExecutionTimeoutException4 D/ G# } I0 t3 O5 ~+ S* v/ t
- MongoDB\Driver\Exception\InvalidArgumentException0 D- B" U) @; b2 s/ w3 i
- MongoDB\Driver\Exception\LogicException
3 `* z. ^/ O5 n6 |2 C7 ?$ x - MongoDB\Driver\Exception\RuntimeException
; x6 [. B& U8 U4 | - MongoDB\Driver\Exception\SSLConnectionException s: d: s4 m4 U6 X; S* @/ p/ W( {% z
- MongoDB\Driver\Exception\UnexpectedValueException& r& w. N8 T1 W' H' p3 h. D' N
- MongoDB\Driver\Exception\WriteException
复制代码
& m) J* m" ]* {4 c! S% \& K+ {/ d2 d! u1 y
; y+ J) M# i8 S3 T* A. t" o$ O
点击查看全部8 c* ~1 `: s/ f
7 e6 j) f- \4 J8 i! L+ b" ]* h' x# u ^4 L& Z( E2 T
|
|