管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
3 V7 a3 Z! l5 ~4 L* a+ ^/ a5 k" j% ~4 N4 ~
下面用PHP7新的API总结一下: f& ?: ]& K \8 ~. j" G0 n* F
8 e, |! ]% p( t2 C一:CURD. ^* ^9 C/ [% |- p- D4 E
) P3 S# f; A& G" V3 c$ R, j) \1:链接
, s3 i! x. Z& c% i {8 G- n* u0 X6 o
- <?php/ r+ ]. W) `% ]
- //链接mongodb% S2 u7 T! `# d$ r6 C# E( ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
" ?5 e9 A2 x, S0 X - root 用户;123:密码;如果没有密码则不写
复制代码
5 d. P( d7 G! k# g2 E$ \0 m6 j2 Y# z5 F
2:查询
7 a# A0 l9 i7 @' x4 b; o
2 k$ k" v* G2 f/ `" A- <?php
: K( o- Y ~' X! `
2 C4 m( A- y; l4 ^1 S1 o- //链接mongodb) X3 E& W) {6 u; I
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
}7 T6 y* r( M, f
0 h( b1 {' [7 S- //查询 g1 c5 ]) ~% F& q7 e8 X& V
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0! F p9 F8 ^+ r# C; P2 U' ?6 d
- $options = [
; ^2 }) v8 J+ n- e& \ f% S: {+ D - 'projection' => ['_id' => 0], //不输出_id字段% J; t& D3 H7 l2 H" B2 d0 S H
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序3 K. G2 ~4 T; E$ @
- ];/ N0 |, |% S" y8 B: X
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
/ |0 R) k. ]; R" | - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
# K2 I: g; c! ~$ m5 I; \ - 2 `0 X( t r$ P/ u
- " c5 r* W: k& ^
- foreach ($list as $document) {) b2 T- C. _# u% r
- print_r($document);
; |3 _! T) i6 S& L. H# w" M) T - }
复制代码 p5 p {7 w* O& l( f5 d
查询更多条件使用方法,参考第二节mongodb基本命令,查询9 y, |. S4 N0 N3 i7 |) b, O/ {* y
8 O9 Y) O7 m; ?2 v5 i- `. d
3:添加; u* l$ f& y5 R4 R" n# G
+ y1 U |2 [7 s, k2 T) G' `
- <?php
0 ~* r; z* f$ M. ~4 @1 N: c0 P - . f6 n) z, H6 S* f' H' g
- //链接mongodb
) ]5 d) t/ O, L" |- E - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ h* r/ `7 J* B/ \
/ i+ F8 w' f! J- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, Q" }/ A; u1 r
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- B8 o! G/ W" m0 @2 e( U
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);" Q+ W2 a: z) q; {
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
/ o6 [2 {: k. @ P$ b4 w# i, b+ j - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, f5 m; H9 D4 v' O4 @4:修改& \9 p" O1 C( [% E& b( L# \- W# R# j* p
/ x4 d5 D* a# E& T% E, a8 L: L
- <?php
" R0 `7 @; E) W% G/ p
' M7 u* C: }$ Z) o9 w4 r- //链接mongodb
+ z1 E3 ?. U7 h5 q9 ] - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 S- _) U; e1 {
# s0 r% G; c5 v- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
0 U' \ m* o3 y: r0 _ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 r7 L& O. w2 e2 c6 u+ G7 n - $bulk->update(
1 l) a# y) h: g6 R5 U; z2 J - ['user_id' => 2],
9 m; \% G. h; ^" }. ~. h - ['$set'=>['real_name'=>'中国国']
- ^! k- A1 K/ P: u' F+ R - ]);
i0 T! I. r0 v, h0 i5 N% w, h - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
% |) Q/ S+ D P2 M! F - //1:字段不存在会添加一个字段;
+ R. E. |& {/ [' { - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
. l9 W8 m* Q7 O6 h$ O - - Z( @/ q. [ [( {' X
- * ^4 z5 ~: ]) |; c5 a. X9 ^! U+ ]* E
- //如果条件不存在不新增加,可以通过设置upsert9 n! q& B$ Z$ |$ {% t8 J
- //db.collectionName.update(query, obj, upsert, multi);0 I( {0 q, G& d( I
( O# C. U4 C O& i/ J& e! `& O* Y- $bulk->update(& T5 w! X, s0 n0 Y; j% p
- ['user_id' => 5],1 k( i* W* x) W$ ?
- [2 g( t3 r1 n$ V5 ?
- '$set'=>['fff'=>'中国国']
% ]6 s0 i7 l6 ` E9 a% n - ],
) R2 n6 R+ q- f% p' Z: l' w - ['multi' => true, 'upsert' => false]
0 T3 J+ Q# w6 F! L - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
+ N% d$ O) J9 M1 ?6 d' E4 q7 L' v - //upsert为 treu:表示不存在就新增- M4 G0 D3 d1 Q( k i
- );
" p9 f+ }# |& ?% R9 ]8 s, F' f - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, q6 L, |/ d8 G6 J6 d% Q1 d) J1 V
ordered 设置( c- L& }3 {5 k1 t2 \
* o8 e# y+ {8 ]
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' I- K' j0 O6 m8 q* L9 N5 s
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行. M9 Z j7 G$ k- v5 E& B) A
' Q8 t) q7 v, d" ?3 U: [3 Z5:删除
- H$ I+ [& P0 E) t% y* T) v
% c( v' O6 W$ o) x2 c2 h8 n- <?php
6 C& | f! {- A C. c' n: ~ - ) ~7 j! Y1 ^8 G+ r" f
- //链接mongodb
- C* V6 H" l+ g- d0 J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ r2 \+ n1 g& _0 N6 f - # C! |# N( ]' [3 W2 `
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 }2 O/ m8 j) x5 f3 W+ h! P: x1 w& \
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% {# n; Z6 o9 u& ]4 q - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
r, d5 t; d: o- u5 n - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合# r; {) ~% p+ e: u; `/ ~8 w4 D C6 C
- delete还可以通过limit设置不同删除方式
1 g7 p- L0 Y# `* e& Y1 Z
6 T- W) Q( p% f: {2 q- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据 }1 W% v; k8 K# r7 G7 J
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 2 d# m3 }4 K0 N1 F1 Y2 N
& [# v* n6 u" D) K' Y1 n. _6:捕获异常: _- z4 N: q& M
) _0 H5 m9 }+ O- S5 C7 N0 ^/ S
- MongoDB\Driver\Exception\AuthenticationException5 D" D _) h* C$ v5 \3 I/ p9 K. _
- MongoDB\Driver\Exception\BulkWriteException, x$ R4 t% u: s6 D( e! ^0 O
- MongoDB\Driver\Exception\ConnectionException
: L2 u5 L: G* j5 d0 t1 {% m - MongoDB\Driver\Exception\ConnectionTimeoutException3 i6 ?: t* H+ |4 ] J
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口, K6 o* z5 d5 h9 `7 }; a
- MongoDB\Driver\Exception\ExecutionTimeoutException
1 r( d3 W( Y. Z I - MongoDB\Driver\Exception\InvalidArgumentException
, X, T% k4 t5 G* F - MongoDB\Driver\Exception\LogicException
4 \; x6 z- Q3 x3 [3 @4 U( d3 M- f - MongoDB\Driver\Exception\RuntimeException
+ c# S6 i4 U3 Y4 A+ x6 r! F - MongoDB\Driver\Exception\SSLConnectionException
; |6 r! ~; A& x" ~* P - MongoDB\Driver\Exception\UnexpectedValueException
/ v/ K3 D. y5 T+ C - MongoDB\Driver\Exception\WriteException
复制代码
2 q% y' {& o: Y2 n4 R
; l X! g3 ?' F$ P
" Q' S! D5 T' ^! e4 N3 F9 F点击查看全部3 E- x& F* w% P& ]5 o
$ ?1 R* \1 ~) k+ K" S0 p% Q
5 I/ _9 V7 y" t& N' ?/ @, O8 ~ |
|