管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
. u$ w2 u9 [: v& M& s$ g
+ _9 j- k, {7 [7 g下面用PHP7新的API总结一下:/ {/ K% F" K8 O* C- T+ _$ v
7 J- P4 n" @, P' N: E) P6 H; J& u
一:CURD
& S% K) X# c( r3 a' l! }% X1 ~0 e5 U% u9 r3 A7 V
1:链接
' A/ d7 [# g @/ ?! A7 N0 C, r& ?+ l% B: ]- H9 u, K
- <?php* G0 H# |% {( ]
- //链接mongodb8 |: R0 g# R& Z
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
8 Q A" X+ p4 }1 G, i9 g/ }! ? - root 用户;123:密码;如果没有密码则不写
复制代码
5 z. l5 s! B* S0 t. |$ [6 @
/ q V# i7 l1 c2:查询) W/ i1 O) A& N$ A" K
1 X& b; I4 \5 e# {) Y
- <?php3 b/ x; R1 f3 p8 b; y
- - q% p2 g% I5 z7 ~
- //链接mongodb$ U1 i1 I' \- s T" M
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& O9 ]; h+ n$ U$ E$ T - # A8 |! T8 S, s( z
- //查询
$ Z% u. z4 }/ V, M* ~/ {& P: O" y, o - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
! P7 ?& \4 n. j& G3 R - $options = [
: E. Q& k. t) `1 m2 q - 'projection' => ['_id' => 0], //不输出_id字段+ w Z+ |% a: e' r9 D* f
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
6 \: Z, _3 [, R - ];
7 A$ z( w. m7 J7 k- @ - $query = new MongoDB\Driver\Query($filter, $options); //查询请求" H( v- n$ C. P( K
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
1 A5 n3 x( Z3 n/ b# j
, u# c# w% O3 u' t e( |) ]
2 [0 t1 e& \/ z6 M- foreach ($list as $document) {% r* g5 H9 X% S0 q( }) ^5 W; D
- print_r($document);
7 }: L2 Y# ]# ]! i( _ - }
复制代码
# T/ `6 ]2 J4 X* [4 I0 v查询更多条件使用方法,参考第二节mongodb基本命令,查询2 F# Y( k8 \9 x3 ~* s7 y0 I* M$ |
9 S) j# H( x" \: }
3:添加
I8 T$ E& s6 k) v8 z# y: j+ `# S# M$ c. v
- <?php
! \( \6 X7 }' M+ G - $ a" q: }& s# M/ `2 W. ?; h
- //链接mongodb
# I, S. o, j* W) I [. c7 |+ j - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');4 P7 M5 K0 y& H! l3 Y
- 8 f9 s* \5 g, i; t; R
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 @0 W" L9 f$ ?* P4 Y! F1 c
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 ~1 U' K+ @! z9 K# [, t% y
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
4 n' T6 ]; X* N2 X$ y - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);9 _+ E _$ _& V1 {! l5 f" i. [2 j/ h; g
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
2 V6 K: V" O( W$ }7 ?5 X" v4:修改" c; l6 S, {4 g% N) w1 M4 W/ L
3 E& E0 N1 G. y- <?php
( N& ~2 p1 V9 F" F9 U( \
( \+ _- T; w2 O/ C- //链接mongodb
2 u/ B, B$ m* ]% ^ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 `- Q5 q6 X: h
* w( I8 g$ S) h9 w* \) t( w2 N h- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行8 }& P' m/ C+ a- ~0 G- x+ y4 c0 P3 t
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( \$ B% Q, e' @+ W - $bulk->update(" a8 h4 t7 A7 T9 I$ v* ]! u
- ['user_id' => 2],
( R( V8 v1 }4 W. h d! Y$ `( Z0 `- q, @ - ['$set'=>['real_name'=>'中国国']
7 j9 Z5 }, [8 c1 A& s - ]);
" N* N4 ]! c( `4 E# b, y$ g3 W - //$set相当于mysql的 set,这里和mysql有两个不同的地方,( X- c1 w5 E* Z- U" f* }. z
- //1:字段不存在会添加一个字段;
+ @" Q- `* P- E& w- [8 W - //2:mongodb默认如果条件不成立,新增加数据,相当于insert, H1 v7 N8 B0 ~$ ^" h3 a/ O
- z4 i6 [" w0 W' I3 u+ k" V3 Y- ' O9 e. O, C* f- g, \
- //如果条件不存在不新增加,可以通过设置upsert$ g, ?6 d9 v* \: h1 l( D- }
- //db.collectionName.update(query, obj, upsert, multi);
Y* u. P! l5 `+ `
p1 s, F: n1 r5 `* D6 N$ b- $bulk->update(, T: n) q3 ^. S- K/ |6 I0 n+ J
- ['user_id' => 5]," T% D2 b: h, e/ G" ^, a) j2 x
- [* p `9 [# N: C" v
- '$set'=>['fff'=>'中国国']" U3 X. c6 ^( K% c9 Z# w
- ],
- c* e! g" P: K1 N - ['multi' => true, 'upsert' => false]
5 T, R: T! T* N1 [6 V! k - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
. `/ T/ P5 }3 d7 E - //upsert为 treu:表示不存在就新增! o8 x8 E3 S7 A
- );- p4 [- o$ P( w) _9 B! D! a
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* `: V3 {% {# h) G* z4 y: c9 I: B, g
: N0 U. O/ F- s0 Aordered 设置% u$ Z" c2 s M4 W. [& J
4 p" W9 L; C' G1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。/ k& Z/ ^+ C$ C. ~, S% o
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行# x/ k& ^/ a- o6 T' h0 n
" n$ f# N% g6 d J6 K( |5 J
5:删除% c6 k8 T/ W5 u$ d0 e
5 A4 q7 b( N* A8 G- [9 a- _
- <?php
: O% ~ m3 ]) O1 V
9 a& r* v, r' S) d: ^- //链接mongodb
7 J4 G+ O) b q3 _ m2 W - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
. g r4 n: f) Y - . u2 d: P$ ^" _2 \! }* u
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 x h# h6 D+ D" l
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行/ x" p4 \9 J2 |+ j
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
! i; @8 E9 P' n1 `% u7 ? - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合/ N/ o% N: t, e
- delete还可以通过limit设置不同删除方式" k- M% u8 Z y4 W4 A9 R
7 Y) }3 l6 a! M/ [9 d- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据8 o( ?6 P0 G3 {8 m1 A, F
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
4 ~% g" Q. q. M/ ]9 \- _5 y/ A$ D
- v6 \9 Q2 `1 I, }% x9 ^6:捕获异常
j0 I; b4 C- E* V! a) w% h9 m3 n% d* r
- MongoDB\Driver\Exception\AuthenticationException
0 @, W5 s) D/ ~ - MongoDB\Driver\Exception\BulkWriteException7 Q, R7 |3 \$ U
- MongoDB\Driver\Exception\ConnectionException
0 W& y/ P0 L' w - MongoDB\Driver\Exception\ConnectionTimeoutException
8 Z7 p9 c- v% z9 ~0 S( J$ h5 H - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
& R6 y% U) Q/ J8 A" { - MongoDB\Driver\Exception\ExecutionTimeoutException
) f4 J( P! t, p& w - MongoDB\Driver\Exception\InvalidArgumentException
0 D; h! v* d1 F) z/ A; ] - MongoDB\Driver\Exception\LogicException
, h5 {; |4 c; h - MongoDB\Driver\Exception\RuntimeException0 N5 S) @* r6 d& X- y Y
- MongoDB\Driver\Exception\SSLConnectionException
* _- s6 X4 L' l7 a8 b& e - MongoDB\Driver\Exception\UnexpectedValueException! x8 [% Y( _0 Q& m& \: b# N( w
- MongoDB\Driver\Exception\WriteException
复制代码
3 z! ?5 a. E' I& ]) l- j: L
/ _9 q Z; M* W, E' i1 H1 j9 ]; B
5 c0 m; c$ y* p8 r点击查看全部
8 c: O( O% m" z
0 R/ v2 a- ]8 y0 g+ P- D- `8 @* v5 ]3 s$ A
|
|