管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。" X8 J: ^. v( l! {1 u$ q8 ~; O
. T S' k. Q8 V& E* A, o
下面用PHP7新的API总结一下:
7 b$ D' F( w1 r6 v* @# Z- ?4 _3 d" o4 @8 B) d, D5 `! t1 k7 W, I
一:CURD( v/ Q, @% b3 j9 z0 H+ K
3 Z) l! }- U3 E+ S* j: |1:链接* {% ~" G! B" x6 a* b1 n
$ V( q. L; v' _! W6 Z
- <?php
) g. j# W; |8 `' g2 ?$ I - //链接mongodb
! y* C' t0 ]; D! L7 S - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');% S( V/ ^* M( q9 _7 O% b) a
- root 用户;123:密码;如果没有密码则不写
复制代码 9 B |9 W& n# ] v* s% i+ _ c
+ w$ ]9 @2 V2 U) ~2 d* `2:查询
d( ?1 D" n& q. v* \
/ Y6 v; _: U4 `- N1 b+ p4 `( {- <?php
# s" _ B+ x: N2 N/ k' g# r4 k9 D: k - 5 y/ r2 W' R. p: P9 P3 Q
- //链接mongodb
1 i& ~& R2 S5 s- h - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" _- r+ Z% s2 {: D7 S% R* s# l - 2 x% J" l) l0 [+ W' N' K& y; {
- //查询% L2 B; Z, s, k" Y$ _% N( S
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0. X2 p% A: W3 k4 W
- $options = [
; [! G# m9 k! D$ i; z - 'projection' => ['_id' => 0], //不输出_id字段
( y% M6 a+ Q) c9 d+ \1 o - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序, H) C* x$ @* ]+ z( `, L- f) B2 D
- ];/ a- N6 J* q% m/ a2 q. R+ Q1 J
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
+ {7 I6 D7 ?. J/ I - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
( i* Y8 C/ N6 R- k3 l. ? j; Z
6 b7 S' ~; g/ u5 F4 H- ; ^+ ]. s3 |6 q3 U2 n* q
- foreach ($list as $document) {
% ^+ |5 b/ w" A% ^! Z- X% ^ - print_r($document); 6 d: b2 C9 [# [) p" _
- }
复制代码
$ X$ K5 A+ ^# p) @查询更多条件使用方法,参考第二节mongodb基本命令,查询
9 h. L/ \3 K) Y/ b! L
2 e; I: A1 @' I, \# V. v3:添加
A# F& P0 P& d
: W4 U: o& c9 i J: a6 \% [- <?php
3 X3 d3 G9 g/ Q: [
8 {1 R8 X, V% f" C' V* m1 H! V: N- g- //链接mongodb
6 a. q9 B. _9 Q1 |" `+ K0 V& |4 P - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! ^& K( B5 [7 w+ P* U7 G9 [$ w
- - ~, z1 T0 l Y0 f# X4 }
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; g" ?& ?& @! A) ^; ~% W
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
$ `) y% A2 B. `& ?' h6 L5 S - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
U- l/ I# e x/ I - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);: d, O( o* [. C1 v. ]" S* F6 w
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 U) {$ N2 @1 ?' T$ m# s6 P& M4:修改
- ?7 J J) `/ W! i) c( P* d* z1 B# [; w0 T2 k4 D
- <?php
( k* V: M: x* ] - 4 l2 c* f: T" p
- //链接mongodb
5 k. r8 h x4 C# x, Y/ y$ m - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
5 W: }" j8 N- z) Z; s* M( `
" `9 |9 Y0 U+ c3 T) O; w1 A* m |- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- D: B, `( `2 s! W
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行# q9 o0 Y7 r" V8 U0 C
- $bulk->update(
4 S$ M+ Y% \" \( u8 o) E - ['user_id' => 2],6 F0 x' u1 X5 d0 r8 |
- ['$set'=>['real_name'=>'中国国']) U% Y, y: |* k7 y( q- t$ ^3 H
- ]); $ o+ o D w& D: \; T
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
: ^' e/ W) f. z" I8 e+ d0 ] - //1:字段不存在会添加一个字段;7 M3 Q( X" L+ S1 {6 l# t
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert" K# ]* v. M5 E* X& s, Z3 d( S5 u
- 8 _; H9 s- K" o0 ]; g) s3 p
- / r; s R+ z# F# G
- //如果条件不存在不新增加,可以通过设置upsert7 U' ]* c& A: U: }. {
- //db.collectionName.update(query, obj, upsert, multi);: Y( u0 ?0 n5 Z8 a* ]. W( ?
( C1 l1 b/ \ m+ b/ o- $bulk->update(
2 I \& t( A) ~# v/ O. N" h, E - ['user_id' => 5],9 Y; h7 y- @9 h6 Y
- [
0 d+ T' f( i/ h# c4 Q* z- s - '$set'=>['fff'=>'中国国']
% v+ w) l+ _; a6 D' u - ],
Y2 x3 h( d, E - ['multi' => true, 'upsert' => false] 4 M" a* M( y2 h/ f! N5 q* N
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 ?+ W8 R: |; ] Q8 a
- //upsert为 treu:表示不存在就新增' m3 h+ Y4 I3 w- ?& k0 ~6 m
- );6 v6 N# y: e, f9 E4 w( ~1 ]8 Q
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 9 ?/ l! j1 d/ b6 u, P
5 H9 |5 p7 s" F+ L
ordered 设置7 O0 B, x( A; Z. o
# e$ u1 R2 O1 A4 }; N9 {1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。- I( }! `* T8 W
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 _: K4 `8 b, g x
5 n& J) {7 M$ n9 Q Z8 ^* U
5:删除% A3 \2 { [2 W# J7 ^
( I$ l+ d' ?6 |) l
- <?php
* C o; @: x, v( s2 q( K, J# L' z - * d% `: a4 C) Y! W0 r0 C% J. X
- //链接mongodb
6 `$ B" k( G) o+ r0 t% }& R - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' h. t" i" H+ Q
/ u1 ?/ Q' ~! g8 U$ m2 J- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ V: j5 M% A3 o+ ]1 A( q
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
! v% }9 B m8 L/ K7 Y - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段, ]0 ~/ T' d* P
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
& N% u' I9 N% z0 @6 |3 a; J - delete还可以通过limit设置不同删除方式
1 n" L2 q0 k+ ^* L - 3 F) |0 `6 O i: i) j- z. g
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
4 ]. u( I% G5 Y8 I7 {+ U7 K - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
; s4 Q. d. f7 @4 a5 Z3 j1 l! o) c# S
6:捕获异常& c5 E5 h1 h X( F* c
6 Y9 o1 N- p5 a3 t, w5 } d
- MongoDB\Driver\Exception\AuthenticationException
4 g ~7 {2 ?9 Z - MongoDB\Driver\Exception\BulkWriteException
- B3 l0 L6 O7 }8 y% l- L - MongoDB\Driver\Exception\ConnectionException5 o% G) H( h) q7 S$ ^' k
- MongoDB\Driver\Exception\ConnectionTimeoutException
0 W( s* H0 L3 h2 F: A8 [ - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口& K+ C# x2 p# l8 m- u& R
- MongoDB\Driver\Exception\ExecutionTimeoutException$ ~5 K8 S2 r9 f0 D g2 f* d- f. p
- MongoDB\Driver\Exception\InvalidArgumentException
/ w9 y% G$ u) W" m; E - MongoDB\Driver\Exception\LogicException
% p* S! n. m% h0 k q% Y - MongoDB\Driver\Exception\RuntimeException
! S" u9 U+ o, T; O/ l - MongoDB\Driver\Exception\SSLConnectionException6 F% }( a2 T3 y6 v( w+ s
- MongoDB\Driver\Exception\UnexpectedValueException* A+ W- x& X2 z
- MongoDB\Driver\Exception\WriteException
复制代码
3 D) a6 g5 N# @3 y- f) q) X9 I
1 L# D6 t7 r4 W
) r' g# e" T# g点击查看全部, a& K! u( f- w2 `+ N
; a( D7 {3 s$ J
! f9 W3 L4 B4 m( v, C7 m |
|