管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。+ X* V# \: H, D) x. F
' Z; {% p1 X5 e& j- h下面用PHP7新的API总结一下:
# _% j6 C$ K) |' m! G0 N/ X. Y; q$ |! n9 ~4 f! Z, p! Q
一:CURD" }* E" {7 E4 }0 L$ M' S3 W" f, h
8 ? R" u* [9 F
1:链接
6 y7 Q9 r8 ]0 d+ V7 U3 P" [4 x. x& y. v3 q% a- e2 A6 `
- <?php
8 l K" J) C6 z, D - //链接mongodb( d, Q* M4 `4 \3 }& i
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
' _# L9 r/ L3 [. S# ^4 E - root 用户;123:密码;如果没有密码则不写
复制代码 . F! d* L. m8 A- a5 i2 v9 W
# g# x0 ]/ \0 N9 B! w1 m2:查询
# l2 P% N5 g! Q9 s& ?' x; Q' C8 d$ [
- <?php
: s, w: O6 X: u& m1 l - * J" I; @, h ~: ]2 d1 S
- //链接mongodb
& ?5 K8 A- l" t% w, \6 V - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; T- }9 z' y. ?% T7 {0 u% A' A
- 1 I' |" r8 V+ W4 V* A
- //查询
) ]/ p$ s# `0 y6 Z: E: ^ - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
6 @( k+ N6 L5 e, |) t' I* U - $options = [3 n) Z/ R, {% v
- 'projection' => ['_id' => 0], //不输出_id字段
2 N) H5 W- L3 P8 |. k - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序 q% t5 T1 z! O/ x2 z4 M
- ];
4 }1 ]; }7 d0 a - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
; Y" S; B4 g& R4 `1 d6 ~ - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
6 Q# K* s; S# J" t, A! s9 f* |2 U0 { - $ W$ F' N; \0 w& T
- , i- R2 s8 X' }
- foreach ($list as $document) {( h7 U) ~2 @* S9 J
- print_r($document);
2 @7 x0 g! f2 X8 U6 L+ ^- ` q - }
复制代码
; l0 O. O0 e' T( x" D& Y% F查询更多条件使用方法,参考第二节mongodb基本命令,查询& Q5 e% z) T3 Q: w
# M! T+ ?8 O4 w: s' ?
3:添加* S- R6 E8 c! Q$ S
1 L; S4 i$ _# X u5 ^& x- <?php
7 h, w t4 M1 z - ' u% W$ p' |! \2 z3 a1 y+ m8 \# N( p
- //链接mongodb
9 ^* v, f) C- E, Q4 t, S8 n1 t - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
7 w1 x4 W( }+ ~1 ? - 8 O- \0 r/ V0 s& d
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
$ B5 T! x, q2 \, h7 H: P - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行# F: h: z9 m& `3 z+ `
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
3 C4 u' v/ m/ b6 p# N5 P/ C' V2 `9 Y+ M - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);7 H3 D+ [3 P% c
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ L4 R6 k A7 ~; t9 q& L+ q4:修改( w7 s0 K# l. @. \
3 o6 w& n ~3 k# M+ z7 M+ O- <?php
) [) E+ D" F4 B* q - % _3 ~: C* [$ \
- //链接mongodb
8 U9 z# F, G3 y - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 u5 w* r0 k& n9 D& r* ? - : \% o7 s, H; o8 X. G
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
+ _4 {" Y5 K" k; M5 U, U - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行) B) N, O- E d8 j( }
- $bulk->update(
: f, _4 v: E) S! x' S8 t) H - ['user_id' => 2],
- w3 b0 R; u' y1 ~ - ['$set'=>['real_name'=>'中国国']
4 g2 P5 x$ h6 V. E - ]);
, H8 R+ R' z. y( M - //$set相当于mysql的 set,这里和mysql有两个不同的地方, g. j* q+ L1 t0 l: o6 l0 Q; J& q
- //1:字段不存在会添加一个字段;
: o, o" g) D: g& s - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
5 Q- d, u4 N4 @
2 E, g3 O8 \/ \+ C- z5 v1 m; \
' h& g# `* e( f' U& r7 b& y$ y- //如果条件不存在不新增加,可以通过设置upsert
- o9 e2 f- Y6 S H4 U% i - //db.collectionName.update(query, obj, upsert, multi);* z& S. K( Q1 i5 O/ Q6 c
# H3 p# l. r1 [- $bulk->update(3 P8 X7 i' Y I" o) {
- ['user_id' => 5],
2 R& d: u k) J/ K - [
, Z0 I' T( l7 h9 O* o - '$set'=>['fff'=>'中国国']
, L, |3 X# A6 t+ S& U( A - ],) B8 ^# R% ]3 Z- @# |
- ['multi' => true, 'upsert' => false]
4 t6 w( a/ Y% @6 b" X7 Q - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条+ q: T- l) w Z
- //upsert为 treu:表示不存在就新增6 o% c6 j0 g, k: s
- );
' y( e) p( L# h& c - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 0 j' [3 l4 j; m$ Q
3 Z3 h% y0 w! X* B8 N/ ?ordered 设置& Y: Z+ R9 G$ z8 L5 \4 A# r; b
3 x; R- z1 p& s# ?
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
7 J, Q$ w% h0 u$ v4 ^4 i1 p. K2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
) z! M& d: E* n+ q6 t, `' a* @1 X" R+ m" X
5:删除/ R: V" g# D/ O7 F/ `
: {& V8 i+ M3 T ]5 Y D
- <?php0 b# d+ x( s" m" A" D: t+ m
- + K: N8 W7 z6 J( N
- //链接mongodb
2 X- F3 h# Z2 N( u - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! m! s4 u4 Q9 ^ _1 d, X6 }
( _) u: q; B% e- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行* I0 Z& _4 x% S4 H: z
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% `4 W2 A4 ]$ ^, U7 _ - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
: E& w2 l- D7 d2 Z - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合% P- N. [2 p1 @0 \9 }! h
- delete还可以通过limit设置不同删除方式, w7 H3 o+ B% p" a6 k: b2 F
1 x, h* n1 G- Y9 ?4 |9 e- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据) u, [0 Z8 K& J, N9 e: r
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
0 p/ g- T$ f( J5 {; N2 W8 ]+ C8 s$ D4 Y1 l
6:捕获异常" _! S7 x1 }1 G3 O" l1 N% |
8 z' t) f7 Y, w# T1 Y( y
- MongoDB\Driver\Exception\AuthenticationException
8 g3 A% q0 p) W4 o5 _9 o - MongoDB\Driver\Exception\BulkWriteException
3 X) Y4 |& ]5 Q& I$ p4 t0 z' \ - MongoDB\Driver\Exception\ConnectionException5 J7 E) j, Q9 m* m( {% y
- MongoDB\Driver\Exception\ConnectionTimeoutException+ d6 L/ I8 W; x- `3 f& m2 P
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
, u" g* P0 y: p3 Y - MongoDB\Driver\Exception\ExecutionTimeoutException
' }/ z+ A& X4 f* t! q - MongoDB\Driver\Exception\InvalidArgumentException! p. C! b, U6 Z# u; m* b8 C
- MongoDB\Driver\Exception\LogicException4 [9 d! ?" l6 a! L% c) p1 Z! y
- MongoDB\Driver\Exception\RuntimeException' J9 n- I' s2 h- g ?) ]8 S/ K2 T
- MongoDB\Driver\Exception\SSLConnectionException
- J1 f7 ]! o9 D/ D* U - MongoDB\Driver\Exception\UnexpectedValueException
R6 E6 w% w. N4 Q( a1 f6 E6 I% p! ^ - MongoDB\Driver\Exception\WriteException
复制代码
" I8 P8 k* d9 V
9 \2 Y5 x$ Z1 L) ?. v, r$ U
( J% G" s+ x8 A6 g点击查看全部
9 i2 _2 y8 z4 ]$ S+ w
. ?4 e8 y. Y4 K; X" b
9 n1 F1 h, D _* d' ~" q$ t |
|