管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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 y8 T; J& V% r+ A) P6 w. K* k5 d: n' j
下面用PHP7新的API总结一下:& Q; s$ }6 r7 ~- {
, K4 |! @; f, E, @& L9 ]5 ^" p
一:CURD
" g/ `* O8 D8 `0 E, p1 P6 k3 X( {" f2 V: B* R
1:链接6 T5 r e( {8 \+ T! v
1 |+ u: g& W' W# U- <?php
0 M Z& T& t, f. s - //链接mongodb; m$ U j3 n9 e' s: ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');; O0 n% f9 D/ W! j
- root 用户;123:密码;如果没有密码则不写
复制代码 # H& n0 M1 M- f3 f
' J* V! \( M$ f+ g
2:查询
) e* ^" t9 E3 d- Y) s% D& v% }) N
' ` x; c: s2 H* I) ]' D' j' Y i- <?php# G* Z/ I; r$ [/ f+ E! b
* @" R5 J+ g6 _7 X- //链接mongodb6 r7 g2 }; Z5 P; s0 Q9 `+ @
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, W, x f7 O& k \/ M1 E0 P; K. ?
% I. d7 c9 K! U0 N! g- //查询! s. P# X! H' @! b* w" F
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0# e2 f4 f( f2 M+ F) G; m
- $options = [
E- d: P7 v9 I6 Q, Q - 'projection' => ['_id' => 0], //不输出_id字段0 j- F0 \. w( D: e
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序" t" R7 @/ y6 t% e- {. `$ ? _
- ];+ q$ y# D# `, b6 o: S
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 a: W6 i! j* S3 V) A' }# r1 @
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
1 a4 ^, j6 k; v% G
: E! _9 R' f$ q- 6 D- o: h& ~; ?" H' j1 _' ]6 J
- foreach ($list as $document) {) g3 K( t0 m% `7 u* u: n
- print_r($document);
5 e3 F' E9 b, G0 t$ }/ N$ ? {9 Y - }
复制代码 6 L. W0 U. P% B& U/ S# T' y
查询更多条件使用方法,参考第二节mongodb基本命令,查询- Q' E% H( J3 |" l* l
; p$ h$ u e0 Y4 @8 z% t. ]
3:添加/ B* F5 Y, k5 B1 u, S( @7 ]! U' m
: X- [; n) }: @$ E& ]
- <?php
8 H: s% l% p9 F5 K - ~8 U# ?0 y' g B; f% z
- //链接mongodb K% [8 r) k I: d/ Y" b+ T k# A6 ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');4 A# e7 ~) o& }# E% @/ f( X
- 2 r4 S& b5 ?4 Q: |! J6 B/ b
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 A" [$ K) E9 t0 |; a- w7 c
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% ^: M" W$ b3 x6 \ h% e* \
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
, Q' G- Z: t8 X - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);. p5 R$ t/ s) c) h
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 ( g2 }# ?" F; k
4:修改
; \ I4 M# U. o# ~) b' n0 y/ V4 s
8 Y7 ~! F% u5 c3 Y, i- <?php
3 |! W- C+ @! c
" J N; ?3 L Y5 t& X7 {4 z- //链接mongodb
# g% o9 }/ e# e2 Z9 H - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! w1 U) C* v. |8 J
- 3 s f" e0 _7 y9 }# n& o
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
8 {) C4 O- z. l. `3 b9 p - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行; }0 v8 i1 V7 G z2 @( x2 U( |
- $bulk->update(
9 o2 }. B5 b) Z7 \: O% p3 m" n - ['user_id' => 2],: C5 `4 Q _" d2 @# B
- ['$set'=>['real_name'=>'中国国']
* E% R" Z ~4 G! B - ]); 7 A) w0 v1 f1 E v& U5 }2 h/ l
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
5 a: Y& w7 E% z$ H - //1:字段不存在会添加一个字段;/ [& w" k" }% `2 s0 p( J- q `
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
3 {. @% J Z o4 s! }4 L
8 s4 T2 _: w- H4 x& ]- 2 u- Y' M+ x+ u8 x' j
- //如果条件不存在不新增加,可以通过设置upsert3 o6 R, g# }9 X
- //db.collectionName.update(query, obj, upsert, multi);3 }# X, N( `' ?
- ! I/ e2 _3 H& x' ]+ K/ S w
- $bulk->update() \9 g7 l: S! @' ~. k
- ['user_id' => 5],! }" d$ o4 @4 Q/ Z8 E& Q' N
- [
) b4 ?. J) ?. V - '$set'=>['fff'=>'中国国']
( u! ^2 x9 o, L8 M! G7 p0 ^ - ],6 v) ]# Y; n5 q
- ['multi' => true, 'upsert' => false] 0 `' i$ D2 r$ l/ b
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条6 k% \' F" o7 o% H8 q/ \% z5 C
- //upsert为 treu:表示不存在就新增; E( c+ H0 k' J* G% a( ]% j
- );4 P2 \) J0 }) [
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 1 k8 G* r, R. K7 O4 F3 x
! `/ i+ _, [# h5 ]5 E3 \9 i" Oordered 设置
e$ q7 E7 Q- i8 b/ ]- h
. L, T K1 }, P q c) E) f1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 ]' V6 S9 J/ M* d" ~# I2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行$ {( h* [& l1 S, K! ^7 @, c
2 \9 B4 B$ L0 k( }4 c* S- Y8 A; o
5:删除% D9 u7 T8 W2 f# U; E2 G
' L/ v, b" j+ @5 }7 }6 \- l6 m- <?php2 z. S% C8 I: ]1 K& D9 `8 m
- : F7 b1 s& Y1 q/ a% |0 w8 d
- //链接mongodb
# E" f0 Z+ l) A- y7 b2 U6 v - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 w5 Y: S) p) B S5 g3 |: T e. w
- " }; G; G7 g. {! |/ l& A) J: E
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# V* h. J% \ o; {* D
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
7 ? G @, p& d4 b% A' A N6 k - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段( W b9 R0 o4 R( k0 I D. D
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
# y# L- I5 ~) a - delete还可以通过limit设置不同删除方式
* t0 ]. ?! ?3 v
, e3 d; ], c) }4 l" G: B7 Y O- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
. h' E+ i4 K2 v! n; O - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 8 w* [* ~* I1 Z" v3 d, _
# R( Y, X6 d: X( k' \6:捕获异常
2 s) k& j7 j4 K* J+ {
8 l! Y7 P b: [9 @6 i ?6 t7 W- MongoDB\Driver\Exception\AuthenticationException* c/ j2 T# B* n
- MongoDB\Driver\Exception\BulkWriteException1 b! i' ^, T7 ^* E
- MongoDB\Driver\Exception\ConnectionException
# }0 p) g, b4 p - MongoDB\Driver\Exception\ConnectionTimeoutException( H; D1 g. L7 v7 ]6 ?& W
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
* x# v3 `6 s- }1 R* ^: v. j8 U - MongoDB\Driver\Exception\ExecutionTimeoutException! m6 E6 e) c& `% f" e6 T
- MongoDB\Driver\Exception\InvalidArgumentException. Y6 K% S# H) \
- MongoDB\Driver\Exception\LogicException
! ^$ N) k7 f+ G4 h" J; m/ U5 @ - MongoDB\Driver\Exception\RuntimeException; Q4 k6 G) J5 `6 c1 H: s, K
- MongoDB\Driver\Exception\SSLConnectionException4 G( {: k& N* C& w" P6 k
- MongoDB\Driver\Exception\UnexpectedValueException
0 a' f2 H9 i7 Z& u8 F! M7 | - MongoDB\Driver\Exception\WriteException
复制代码
( c3 E. J- I6 j5 t1 D1 ~! T, V3 v/ u% a! R9 W7 t9 l
+ `& j# m5 n. ?; u( ~
点击查看全部
8 y9 J3 X, [' w' D( P2 O
( l2 n1 Z7 s' r2 E/ z; z
' V; j% @: P# @! I |
|