管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
% t9 [" x1 o( H- t$ T- G9 J2 J" N' m) K( B4 X
下面用PHP7新的API总结一下:
/ E. A3 r! a" _0 {; P# j
$ S/ y7 W B$ s0 ~一:CURD
+ t2 V9 p: L# }6 {4 X5 {& Q
6 u: i1 \; a7 T- C1:链接
* E. d4 O! f8 N: V5 E9 `* T [( y: H1 S/ P& z% {2 [5 m
- <?php! b+ x9 A5 \0 z- A* f5 m" \
- //链接mongodb
- V6 B1 }" i9 X - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');0 M$ H' F/ |/ E5 i1 W# a
- root 用户;123:密码;如果没有密码则不写
复制代码
0 F7 W. Z% u+ I3 Y4 q: K6 m+ B$ A4 y* x/ T/ t. X4 s/ S% q
2:查询- I5 B" g0 s" i2 W7 Y6 J
) I, G! V$ m- z+ k) [- <?php
; F9 D+ c. R. G6 a# v - 0 U, }8 }' U9 O: c3 C
- //链接mongodb+ B, w/ F+ A. F' |5 Q
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& a5 o( K M5 `8 l! q; `4 |
& e. x1 J+ a9 \. U. R; T7 a- //查询2 R8 }2 c8 M: s& E3 W# T
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
: c* {6 H# U E0 O7 Q - $options = [
2 s$ U" ~" G5 F6 p, Z* x3 ~ - 'projection' => ['_id' => 0], //不输出_id字段
* ~6 n. r1 e M+ P+ q - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' l- k1 m+ e9 S/ \3 Y" ^8 c( B
- ];' {5 r5 y: P! K
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求) r3 g1 f, d3 b* {
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
/ \' b, t4 K) G4 ~7 Z+ t: [! Y0 t - ) }5 z$ [$ V7 T. _9 j# C% P
- 5 M- G U v z6 d7 t
- foreach ($list as $document) {
% J( p& Y% d0 _; s - print_r($document);
$ i8 ~- a7 S: l! \9 h - }
复制代码
) K% F; W& m% z- x% J查询更多条件使用方法,参考第二节mongodb基本命令,查询
7 U. k0 G/ f6 W9 n( T2 F" k- C0 X
" r8 C# k! t5 J1 q- O3:添加0 z) Z/ f+ B; \# q/ e4 A
) T* M: ]) Z8 d, G) u- <?php
2 ` V) Q3 {3 A: t* J4 B
* j( N; b0 ?, N) V* P0 J3 _7 s9 X- //链接mongodb1 a) j- c6 s0 L+ a1 M# L8 ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ e# _/ a6 H4 y1 `$ S I0 e$ ` - 4 a* c" Z9 M2 D4 o$ u* \! n' A, m
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
i! b6 `5 q" p+ I/ F7 F/ d( c0 L - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- _5 a+ g+ a/ T9 {: s( ]$ ?6 Z
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);. @& w4 q4 p. M5 b0 Y$ p
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
, A4 R2 [8 H% c) E - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
! f. Z7 b9 B0 j/ n4:修改# Q2 R' u! I; U
0 Y+ u5 b' }. S5 G1 e. U! C- <?php; A. M ~# E4 Q7 P% V
- 1 C. i1 j: f( c
- //链接mongodb! E/ ^; e7 ~( S' |
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
% K+ T- A. q/ q, ?0 b - ) ~* }( }4 D4 x4 q4 g6 g K7 N
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- r0 ^7 q. C1 N( ?$ P' \# N/ M
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
. A$ I5 F# D4 s2 G- Z- d9 }4 x - $bulk->update(
9 G `; u" e: i - ['user_id' => 2],+ t$ k: K5 C( T
- ['$set'=>['real_name'=>'中国国']
6 x. [+ p+ R7 J& K2 G! X4 ]- P - ]); ; q9 Y" T2 r+ `2 o# n+ `
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ H4 Z* `$ ~0 c4 Y: {
- //1:字段不存在会添加一个字段;
3 B, i6 W) ]0 q* ^8 h, ^7 ` - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
' ]8 T/ ^2 T, y% |( y# X. u/ S
|# h# t8 b! z) c: X
3 F" t) _) `& X4 u7 K% I- //如果条件不存在不新增加,可以通过设置upsert
) f7 Z& {8 d) a1 b' o; { - //db.collectionName.update(query, obj, upsert, multi);
/ j5 p$ f, Y I - ( a5 Y- e9 A# `0 ?4 m
- $bulk->update(3 @1 F* V* [3 X. C
- ['user_id' => 5],
) S/ k( |' b/ J6 c+ e - [9 O$ ~1 ]' Z- N. R3 B! X3 g
- '$set'=>['fff'=>'中国国']
# ]9 T. ^0 m) Q. j# h' u" m' N - ],* o1 O1 O$ h& A+ B. S
- ['multi' => true, 'upsert' => false]
) o1 y1 @- o$ T - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
) Q7 O- Z$ \, e& @ - //upsert为 treu:表示不存在就新增0 P' k* s' l" h; `9 o% F# `6 I- t
- );
9 ~* X5 [6 \3 x0 H5 c - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 6 e; U) C6 A2 O% y3 c" a- h
1 j7 k' f% t9 r2 @ordered 设置
7 M2 S2 Z R- R% {, d; z2 W! ]( a& u! J1 r8 s
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 G3 p, n+ s) X7 p5 F2 f
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
$ G" b2 I0 E7 X4 ?+ b& l2 }
4 H; ~* z3 ^* S4 J- I( T5:删除1 S" G3 i5 x5 D6 f6 y+ e* v
$ X3 W9 E* S3 f( Y' c- <?php3 E# w9 A a" e$ s% [( o8 S u
- " p$ a" f# O" t( _* \. r
- //链接mongodb
7 ~1 r8 Q* s* J/ a1 p' c5 L# @ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; x8 @* P9 B; L" X; A
- ( u( [ Y. R7 i! m
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
0 w; T# v7 `* u8 x' | p! A - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行 D! F6 o, C3 j
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
" k# R( L6 H1 A: A! w - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合8 B# G. h) W. h# O: F
- delete还可以通过limit设置不同删除方式+ y7 Q2 [6 S, r: h! y% Y4 K6 ~% n& Z
- $ o; v2 z2 ~: i
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
: h l( a U6 D( K* T/ j - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 5 g9 |. h6 X7 y3 s
) { z& J% W! n
6:捕获异常( `) ]7 T; r7 C- I! ]' F% |
! J- G5 o! b% ~8 s& r/ |- MongoDB\Driver\Exception\AuthenticationException! O: c5 i- r. F3 s
- MongoDB\Driver\Exception\BulkWriteException Y5 E; M& @2 Q9 Q# R
- MongoDB\Driver\Exception\ConnectionException8 R3 s5 j8 L% S% B- q M
- MongoDB\Driver\Exception\ConnectionTimeoutException- C3 e9 |- m( f
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口$ c1 R9 W/ u( P/ V3 t1 s2 u( M, z
- MongoDB\Driver\Exception\ExecutionTimeoutException
9 @8 {$ ? Z, s j, j$ c6 ~* { - MongoDB\Driver\Exception\InvalidArgumentException
9 K1 L! z. i q5 P - MongoDB\Driver\Exception\LogicException/ m, @3 t9 y0 n& W0 j# `8 g6 I2 M% R0 Y
- MongoDB\Driver\Exception\RuntimeException0 H) {# w6 l9 h! G% j ^
- MongoDB\Driver\Exception\SSLConnectionException
+ i- N- X g4 }" M - MongoDB\Driver\Exception\UnexpectedValueException
; I' C @7 @7 M& w( _* O$ w/ Q - MongoDB\Driver\Exception\WriteException
复制代码 " Q+ H( V& a5 u0 ]2 v5 i
( J: N, k- X9 C
# [5 t! M# |( A. t
点击查看全部2 L: L6 C& {6 _/ o, \
$ W& j( Q& \ d: A. Y7 O
& t0 j$ Z- G4 N2 r9 C o
|
|