管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。* \7 F9 T& x9 M2 i' D
: C6 t- Q3 C+ \* J0 K
下面用PHP7新的API总结一下:- L4 N( [5 |0 p
4 s" W8 `# Q) o一:CURD ^1 i$ v$ f7 h) K
7 H( i4 P2 ]8 s& N: ? y0 f1:链接
1 J# a* n6 d$ A6 V( z0 f5 {) A- w3 i. Y/ H5 N7 [
- <?php
7 G9 O7 G6 q$ s - //链接mongodb" \# ], j- `* K( o
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');7 |& D+ o, m& L w3 I" k9 o
- root 用户;123:密码;如果没有密码则不写
复制代码
4 J; f! ?/ v' d7 S/ ^ Z. S6 u" P* L8 K1 ~& m8 \4 f2 N
2:查询; B' n/ \. _5 P/ W9 }2 g+ q
$ N- K% v' n4 T4 H
- <?php
V: A9 |: b0 {
3 ~& ]2 z+ a/ c( q- b/ B+ @7 J- //链接mongodb1 A9 l0 b! _7 `% M4 H9 u
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');- H0 s* K: ~% M4 D: o: a
! @/ U. k3 G# y" ^1 t: u- //查询) D h& p$ _- H R2 |7 b7 Y$ j
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0( W( q6 I$ A- o& e5 V- A, O; V
- $options = [
7 c' w) n( k$ ~) z% S% i - 'projection' => ['_id' => 0], //不输出_id字段, a5 y9 n# v. S' }5 x
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序$ `3 a! t7 G: q6 L& X- u/ E' B9 ?1 W
- ];
% Q) u, F9 x0 t$ s# W' F - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
( P; }( T, E- b" Q - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
# r% u5 O8 P( u; Y; j& x - % D6 b" m$ ?* g6 j3 n
6 L F4 C7 G: H8 M2 V( }! l' y5 d- foreach ($list as $document) {
* v5 e8 `1 Z# h6 n9 ~1 V" f+ F - print_r($document); $ X. `( O# ?+ n& T- H6 R
- }
复制代码 ! D7 i0 H& e, l
查询更多条件使用方法,参考第二节mongodb基本命令,查询
- M. R( f" y" v0 F& Q% [" ~1 r. j
7 @, f7 b" q: H7 ?- Q8 j: J$ y3:添加; c5 ?+ Y4 q, E9 r# u
- L1 T3 G, P. A8 v
- <?php0 d3 ^$ b8 n& \
- Q1 a# L+ S0 [
- //链接mongodb, O( a, b" x2 s) }" w
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 {% o U- H- N/ q
- 2 H- x* d) c1 F( V
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ _& K! |2 M7 Q. E9 J
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
: Q' W% e7 b' Y# R% o7 z% k. c+ P - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);) b* E" n% K5 Q, h+ S
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);- m& l b8 a- B+ e
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: p7 j9 _/ t/ J4:修改
: K' `2 y. j. l& T( ?2 r9 d
" m5 T! d5 K$ ~3 c$ b- <?php
( V9 L0 X5 @1 f8 w. H. }" L" b
7 G; o! c' @' Z' E! @2 Y$ `" v- //链接mongodb: a( \% J9 c- y+ f# ^' M/ s* W$ k5 g
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ M% ?+ q& I; i" [ x$ g2 i - 0 ]2 O# a* M" T3 b( Y6 ^- e @) z
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 r2 E' F# D/ H$ L# e+ k
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
! |* ^& \& r1 f5 `. y - $bulk->update(7 |# }& g: A1 {- t9 q3 R
- ['user_id' => 2],
% M1 _4 E$ X# W5 _* t- d8 O& j& R7 R - ['$set'=>['real_name'=>'中国国']
# f& j5 u5 K- i W - ]); ! A1 g; j1 G5 `! j
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
1 v/ C7 R' N7 O {' f: b - //1:字段不存在会添加一个字段;( k6 G6 _1 z) Z7 {
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
1 V% ?& Q2 U. j
6 `: ^* N+ y7 y5 h [' Y- . O, @) B+ Q, r$ q& d( p4 n
- //如果条件不存在不新增加,可以通过设置upsert% M, z+ X4 V2 A* C
- //db.collectionName.update(query, obj, upsert, multi);8 U! p I" j+ o1 B# }. U( L
0 }/ p# ?+ z3 e1 Y9 o" k- $bulk->update(2 o' z( {5 k# D" B2 v
- ['user_id' => 5],
. {. V/ I! H& @9 B1 S - [
6 }2 p9 {$ O! Y) M - '$set'=>['fff'=>'中国国']$ H8 ]; H: K' o( ^4 n. {- W5 ]
- ],+ r! I. a3 `$ e0 C6 L
- ['multi' => true, 'upsert' => false]
; m% h9 k- ~/ o3 Z+ O; n8 h- g - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
6 e+ H0 T3 _* \* G - //upsert为 treu:表示不存在就新增
" @0 U- J/ G7 u - );
" o* V* ]; B5 j5 S9 c - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 5 c1 y. V6 e/ N; X
( K( [8 h0 v% C
ordered 设置5 p3 {1 F T3 O
$ }0 D, `6 @3 J* q
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。0 T2 B C: u) Y
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行 {" A, x) f! o$ z: K
" b' C9 @, v P' ?
5:删除
1 B) J [3 L: [; `8 |6 F% L2 I/ V i* R3 b
- <?php
0 V8 x1 ]) `! o' H6 U$ o
4 L8 B" z; \8 @' T8 `0 H! q7 ~* g+ Q- //链接mongodb, _, |! I4 C1 u% P+ _; s) B2 o e
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');- ~. {; h0 G' J9 F7 Y
7 s h `6 f; }7 o- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' B/ `# j' P2 A/ r, c/ O' V* C
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
! ^# S# E& a h6 c1 k( e u - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段 _0 J5 \* _0 G$ h6 R4 a+ Y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
) i9 e4 i1 ^1 E. G* m; O5 N - delete还可以通过limit设置不同删除方式# h* v3 ^; t) I* g
- : n) v( \5 F3 h) E4 ]6 {
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
{- q2 X& @5 j0 C7 y% R - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 * w g8 I3 Y! u* T' D# d
9 t8 T& G1 g A& ?* m3 S" G1 e6:捕获异常: w& M- S2 P6 R$ W7 b
& f0 A1 C: W3 n- U- MongoDB\Driver\Exception\AuthenticationException( f& Y- q+ E! f) [+ _ }- m/ Q
- MongoDB\Driver\Exception\BulkWriteException4 m# i& V# X7 i; \, N
- MongoDB\Driver\Exception\ConnectionException! y5 D; r* ~$ f+ f: e5 y: A
- MongoDB\Driver\Exception\ConnectionTimeoutException
7 U; P1 J( p+ I5 J - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口% Y8 Y+ x2 G# ^% W& L9 A
- MongoDB\Driver\Exception\ExecutionTimeoutException
# y- h$ U/ x4 B- O7 U - MongoDB\Driver\Exception\InvalidArgumentException0 U" i( T& E' _. E# ?9 z
- MongoDB\Driver\Exception\LogicException. i. ^5 _ i; B2 Z, w
- MongoDB\Driver\Exception\RuntimeException, \7 U7 F% [6 q8 i: F
- MongoDB\Driver\Exception\SSLConnectionException' V, R; V3 n+ a+ f3 Q
- MongoDB\Driver\Exception\UnexpectedValueException
$ |& M. p6 ~& R: E5 ? - MongoDB\Driver\Exception\WriteException
复制代码 & H5 |4 ~( B6 i R! W+ L
6 w c; X0 r* P1 E2 ~" I# ]
8 K) N m5 m. U: M3 G, _; U; i
点击查看全部
, f. v3 [, S6 ^+ ~" A
! c9 J; P+ c( k2 Z8 P
; Z: l( {. d# |& x# D! A |
|