管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
# o' {0 a4 i! E8 y! C5 g
/ d& `! b ]' x$ I下面用PHP7新的API总结一下:8 ^/ p# `" J0 y: d) ?
* g& @8 W2 E. s- b5 Z w
一:CURD
3 M s+ A( a, c5 }4 A
3 g! d3 J) n! k8 c1:链接
) Z q3 l- p" b; U; J
5 a# y& \* D M0 W0 `( K5 Z }4 W- B- <?php
1 H) E( l: z0 I/ U - //链接mongodb
' b& l' j# V, H. e' y - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
/ k- {. i) I7 H0 T) T( Q* Z" Z, x - root 用户;123:密码;如果没有密码则不写
复制代码
$ H4 _7 f+ C% x8 x6 \$ z% m+ g- }/ I T4 l; ^- K0 D- N
2:查询7 w8 w! R, h8 \! `& }
- q* i. Q/ V: X7 ]9 u0 ]' T0 I- <?php2 k: R: y5 C& C
- 9 V( [- O6 s9 r2 e! F
- //链接mongodb
, d3 @2 C& ~' N - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ V+ I1 I+ Z/ Q4 I5 T1 q- z
/ ^9 n1 e& n. b2 a. ?0 s- //查询1 ?+ ?. ]% f; k9 E4 I! U$ D
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0# w: t; u7 L/ ~0 ?
- $options = [0 Z4 t( X% b) i( Q9 A
- 'projection' => ['_id' => 0], //不输出_id字段
$ R( f) A# i3 A" s* r5 [ - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
' ]5 l) U* }% f# J% X6 G - ];
) r3 E3 v$ Z3 W4 Y4 F - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
% y) r7 l& C! P$ p - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
. |: k E$ L) ~ - % ]$ i4 ~- C! `$ v# T: d4 d
- $ \7 H0 N' V3 e6 _- z
- foreach ($list as $document) {
6 D, Z8 q- ]. h& T1 w2 t - print_r($document); ( T; \9 T, i5 D4 g: K6 e
- }
复制代码 # O# E, o1 ^# }3 ^$ ^/ i
查询更多条件使用方法,参考第二节mongodb基本命令,查询
; x1 H1 X$ v# r: d d! g# o# ?% y# N% K
3:添加
( \( W1 Z# ~9 O- O% L/ s8 G1 I$ m2 j+ k" j* g
- <?php
# A5 B! r; p& @) }3 H
* A+ f' ^+ A0 S6 D/ E8 Y0 U+ k( |2 \- //链接mongodb
# }: k3 ]+ ~! M/ E! F - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ Z, ?! g9 G1 Q1 V! L. K
- 3 ?4 r8 h0 o3 |
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; Z) w3 p2 {$ b9 ^8 V, i - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( @5 E0 o5 K5 B- {7 n
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);9 |8 z; f. |) n; m, B6 m Z% K
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
" K% C3 O# e; w G - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
! t4 `; g5 {8 C% h- ?, v0 \4:修改6 j5 t2 V! |8 D* p
! K# x, u0 d! g. J# _( Q: c' a& c- <?php
) B, A6 h: l+ D& C - * P, l/ Y7 }: Y' V$ v. b- d
- //链接mongodb
2 }* b! O/ x, y: Q9 _1 E - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" b8 d o- k. d6 g7 z( @4 |
, r, [2 }( j0 b- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, Z& w) ]# {* L3 t8 X* V0 w
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% L9 S5 u+ I6 \0 b - $bulk->update(
% |# }& I+ b" Q3 s# O$ D$ H" J, A - ['user_id' => 2],
1 r8 A) T' v7 ~ - ['$set'=>['real_name'=>'中国国']% x/ p/ s5 a+ @/ z! @
- ]); & _, X, _0 ^) J1 K- z+ u! E
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,8 S, N3 z7 g, p2 d
- //1:字段不存在会添加一个字段;* C6 m5 k- f" h9 a
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert! T3 W( n+ y& |' u! q: X
8 D, @$ A5 Z! l9 s- 1 s* X( N4 e. `, \
- //如果条件不存在不新增加,可以通过设置upsert
4 d& K, r! D5 j) t& }. b5 A - //db.collectionName.update(query, obj, upsert, multi);0 [& H: M+ F5 _! n6 o
! b% p& m8 P" V$ h) ^- $bulk->update(" k' v4 i. q% B1 a6 k
- ['user_id' => 5],
" |, n% r: e- T1 V1 |! I/ b' i - [$ D* m9 q8 }* ^
- '$set'=>['fff'=>'中国国']
/ e. a* Y+ U* q* ]7 Q7 v2 ]4 Q - ],* R2 I# K. G/ j B9 S: |
- ['multi' => true, 'upsert' => false] 3 i) v+ ]" Z" i2 w9 r
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
3 q3 V- @$ ~. p5 G) m - //upsert为 treu:表示不存在就新增
7 Q9 c! L) J+ b. X - );
3 t. G& j, o% P' U1 M& ? - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 0 n) ~2 R2 K5 r; t5 Z
z4 k0 p* L1 q9 T4 Xordered 设置
, E" g* x% g/ B( Y. j4 c% [% p, |7 F0 \* F5 D, o z+ L) l2 \+ H
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。- o* D+ O( O1 d* f" X r, x- r
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行! ]0 k4 L2 z4 S
. c: U& g: v/ N+ B' a
5:删除8 Z: M8 B) k, g3 X7 A/ T. d2 n# h
& Q7 M0 `8 Z9 Q' y. i- <?php3 }& w: d0 g, {0 y
; M/ z8 d' `' Q0 s9 I0 ?" x- //链接mongodb, `0 [3 m# G8 V4 q
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. c% m# q6 _& F; Z6 c' O
- 9 l8 k/ J) b& r4 @
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
9 A! c0 Y8 v: l - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( | X, `' g! `- [. h" [ - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段6 l K- I0 Z. z1 K/ v9 |6 ^* I& i
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
- m/ |& j7 ]9 z4 h* b! O - delete还可以通过limit设置不同删除方式
4 T& V0 _1 J& N( G" u8 I2 d - ( O- w E# ^% r- u$ d
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据. l) L( p' P) r) `8 `5 L* c8 H3 K
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 + C; M8 H5 L5 Q. M
* Q# R& k% j2 E' R- p
6:捕获异常
8 X9 w2 C5 E, t; w" \2 |6 i/ d# c& X$ m. g; ~$ e2 l
- MongoDB\Driver\Exception\AuthenticationException$ N) ^) N& n7 i6 ~8 c: D2 A2 @
- MongoDB\Driver\Exception\BulkWriteException
8 Q, E; I h n8 e u" Q" k - MongoDB\Driver\Exception\ConnectionException9 K' ?+ u' z3 w! y+ p; n
- MongoDB\Driver\Exception\ConnectionTimeoutException# h0 A& h* v2 `& R, d3 D/ X
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
/ k9 O7 z8 ~2 V; o9 Z. T/ [. P - MongoDB\Driver\Exception\ExecutionTimeoutException
: P" B: u; `- [: H% s - MongoDB\Driver\Exception\InvalidArgumentException
( i0 T, c8 [( g u2 I" Z - MongoDB\Driver\Exception\LogicException
7 E- \) ~9 E+ k7 n* g+ r! \; V+ Q9 } - MongoDB\Driver\Exception\RuntimeException) U0 Z$ s: J/ c9 B' J
- MongoDB\Driver\Exception\SSLConnectionException
8 Z1 A( G2 D2 \) J$ `* n1 a - MongoDB\Driver\Exception\UnexpectedValueException
- L% |1 Y2 d7 p( z i' r9 u& o - MongoDB\Driver\Exception\WriteException
复制代码 & ?6 A3 T; y7 y
n& g* e. a3 i- Q5 Q4 D1 v( a% U" `; v; @
点击查看全部9 d0 @7 a1 @* V
3 x. F; s* [6 E2 j" N+ Q* {* m# y7 z! p0 s' E6 B3 g
|
|