管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。0 d9 K: v8 S0 D9 F9 N
% T" n. p" q5 m9 Y下面用PHP7新的API总结一下:
3 I! w9 t" S* m; V6 z) X8 x* M' V
一:CURD
. ] n Z6 X6 ^2 v) j
4 }/ o. D7 n$ I1 H4 q' W" r1:链接
# o8 W3 Q1 z; A* K
8 G2 h k. o0 z7 q- <?php
0 g' _) {# E3 k) A8 y - //链接mongodb
/ v2 g) u+ |$ @ j7 b - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');; O6 Y) w& H( V, g; q
- root 用户;123:密码;如果没有密码则不写
复制代码
* N, Q( G4 B+ u, X2 q7 y
) t" h8 t8 A7 Z) g6 G! z/ O2:查询
( y& x: M! \7 w* F8 R4 c, ]
6 e$ @7 t$ ^ D2 {: y5 u! k- <?php
! {+ _, n* F- w- C% ]; { - 5 ^) j+ i* d3 \! M( Y5 z
- //链接mongodb
! J& q) L1 v; q; t8 x8 e - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ c, m1 z; m8 A
6 C2 x3 \/ B+ N5 S/ r- //查询4 y: }1 V+ S7 D( i- @6 W2 G
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
6 e% y1 v9 N" c z9 @+ ?5 | - $options = [
" t% N' t7 {( h9 Q' w" }4 l; p* u - 'projection' => ['_id' => 0], //不输出_id字段
9 [) r" R, D1 ~6 E6 d& e+ V. r+ m - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
I/ K, i4 D* @3 h - ];
( U" V/ `' h: p6 _, h: z3 x2 w - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
3 O8 r7 m0 b* V! e& C - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合0 v( S6 T* Z! @; @
- # x! y( A/ G; V! z, ]2 Z% k* s3 d
9 Z! {: t; K! I# {- foreach ($list as $document) {
8 W* f. b9 b% Y* L& l - print_r($document); 5 ?' F' o! R. l. n; O& K
- }
复制代码
/ E. ~2 V) d. e& T8 E6 l查询更多条件使用方法,参考第二节mongodb基本命令,查询0 U9 g' s! P% [& i! `) c3 }+ b
& ]6 J/ W9 G" t% d5 J3:添加 ?' C8 G& g+ @4 O# N( h" ^
6 `& T4 v! y6 k4 f5 m
- <?php7 @; l, _. r: Q- T
& Y/ u0 s0 R' o) Q- //链接mongodb" c& s: P# y" p& O6 Z8 ]9 y
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 t( N* r8 E4 ` D3 _) a0 t5 N
- , V2 _5 H `. z, ]* Q9 o
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' w3 a1 @1 {3 U* z7 ~0 c& d( s
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ [4 J5 I: f, \. a& Z5 P
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);0 Q5 W0 j2 P9 g! n/ s# _# ~+ y% i9 g( J
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
+ }& {# }( ?7 ~0 s - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. s1 a/ p/ k7 `# s, Z1 f4 w" N3 N4:修改
- ]- {3 C/ K- N6 {; o+ w/ T# E
- i8 b+ p. C& ~- <?php
: \3 k c' i; Z& ~6 b$ }. R
; i4 Z- B+ ^; t. Z N5 G- //链接mongodb! u0 W) ?$ g+ N6 \, r6 L. ~; O- l
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 A4 C" B1 K0 M0 `" h- |
- ( Z8 S! N I1 j# g& u9 b* _
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
7 x; x6 A+ X5 M; ^4 x7 b5 i: X2 S - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
* x! b- l- J3 U* R5 M( S - $bulk->update(7 W: H8 u! R4 b8 {# r6 Z
- ['user_id' => 2],: T. ]5 X; Q. g8 o: c5 k% G
- ['$set'=>['real_name'=>'中国国']- `4 o5 \ x; R: y& W1 N) R# F
- ]); " X7 F- C) N9 _$ }% p2 [
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,2 |$ v) l2 i& P E' u; q2 I1 ^+ ?! \
- //1:字段不存在会添加一个字段;
7 T$ ?: o: h4 Y: u( Q& q& L - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
9 k: B+ ^$ V1 d9 i2 n - 9 P1 E. ^2 p( _" Z! w1 w
- . H* h0 T9 Q! t0 i
- //如果条件不存在不新增加,可以通过设置upsert& A% t& g) M! W& D4 A
- //db.collectionName.update(query, obj, upsert, multi);0 ]" b, c7 L. h3 c/ Q) h+ d
- # p- S4 C$ M- M
- $bulk->update(
+ M5 r5 q: N0 _: V9 E' d - ['user_id' => 5],, O. j1 \9 ~9 N6 B
- [+ F; p8 ]: t1 }) }! C
- '$set'=>['fff'=>'中国国']7 G& |0 V: U3 U5 }# P' B+ |3 j8 r/ q# Q
- ],
0 a: P) h( b! g+ I+ q: P: F4 J - ['multi' => true, 'upsert' => false] " P# D8 ^1 Q1 q1 _$ R
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条, W+ z, n8 F/ r! d# g4 a/ @
- //upsert为 treu:表示不存在就新增
! @$ Y2 h, S. [+ G/ P* a - );/ L6 m( X) L. G& `" w
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 + k" @" m9 d$ Y6 L3 \
4 J! c7 n" h; D: |' r6 R/ ^ordered 设置1 S n) s# S3 ^! H3 ~; P' F$ b" H q
9 O1 k- x/ g! N5 @6 O8 p
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) t* }3 Q9 M% W2 n2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 D" U1 `3 F" I; I' B7 c
! ]0 x/ L: N% r7 k+ W; b* Z5:删除7 U7 [0 y0 b& j2 J
- s1 `6 {8 D; u; j3 P' p8 Z* S' v
- <?php5 E/ R/ p2 l2 w8 M
$ f/ [' x+ b: k9 N- //链接mongodb3 V+ A7 S: a6 Q" j( i
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 _: r& _9 E& C* x
- 5 t# S3 f; P7 \6 F" ?
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 E! |( L g3 v& }9 W+ W
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* x. F" `3 [) {5 {- H, z
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段- h) K& ?& b5 U, D+ g! s3 |8 H8 F: G, T
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合! a0 Q6 [' ?( }
- delete还可以通过limit设置不同删除方式" S; r/ h: ~0 B3 e! f6 X
* i; ^3 p: E$ c3 B X4 n1 o- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据# G% C8 w# I d& a
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 ; z d0 O; e1 `
2 H0 @4 N# C6 r7 g$ h7 v: @ ~
6:捕获异常! n& I P) O2 Y" R
( S: g5 o/ }8 S# G" h- MongoDB\Driver\Exception\AuthenticationException
4 u X+ d7 E- B5 U, l - MongoDB\Driver\Exception\BulkWriteException9 k( ?( W5 y0 w! M: k" O
- MongoDB\Driver\Exception\ConnectionException; V# Z, {) P7 Q) R* z( u0 n2 i
- MongoDB\Driver\Exception\ConnectionTimeoutException* F! T& C1 S/ X; Q+ T3 d
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口 q2 o6 h/ {5 D: c0 d
- MongoDB\Driver\Exception\ExecutionTimeoutException6 ?2 X. w7 g+ [, `
- MongoDB\Driver\Exception\InvalidArgumentException) j5 \/ p' d! I
- MongoDB\Driver\Exception\LogicException' `& i; p c4 q( ~* w: N) t
- MongoDB\Driver\Exception\RuntimeException
/ b- ^' I* P! j - MongoDB\Driver\Exception\SSLConnectionException0 I8 e; t; b/ M( D2 L
- MongoDB\Driver\Exception\UnexpectedValueException
& [7 G0 F6 `% `) m1 | - MongoDB\Driver\Exception\WriteException
复制代码 1 g" h7 N+ K# i8 w& X9 A
5 S& {5 i( V' y- }9 |
$ U6 k; e( l0 j3 C2 ~0 e3 O
点击查看全部
! \; o0 e* \/ c+ y
8 x/ C6 F* O# {
. X j% S+ A: p7 H0 W; T6 |) z& h |
|