管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。# r# _' ]+ s7 k j8 E# E
8 P C6 I+ K% e2 k7 w( _下面用PHP7新的API总结一下:) B+ S( u; z( C: T4 j
$ y' Z6 e3 s! x( v/ K
一:CURD
1 p1 x% M1 R1 M+ h& G+ s8 F% a9 l0 U, e* S ?( o$ }% [5 ]
1:链接
3 E/ r, U+ }( I5 u, g& z- k) j$ L' f
- <?php
! z T# ^: o% Q6 X+ z% o: |, T1 E - //链接mongodb& k6 u. w5 y2 ^# {
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');% z2 Q1 J2 m- g1 {- G) G+ Z, s6 ~- e
- root 用户;123:密码;如果没有密码则不写
复制代码
: W- w6 Q M$ T& o( n/ ~' G& f+ Y, }; Z+ q Z, V2 ~3 k7 l
2:查询( d& o9 N2 a1 l: Y3 f8 O
( I6 s/ Y3 P9 b9 L9 l6 b7 d- <?php
6 X6 Q& d) u: v; D; k* ~
2 q ?. b# p/ h U8 ^- //链接mongodb
: C/ S4 R( |* [! d1 F - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 N: z4 t; x' e - . |6 p0 G* |1 Z; Y/ \- c7 ^
- //查询
1 L) Z6 T9 a" T X5 H - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
# J2 x/ _- `5 F) L - $options = [( Z9 P1 i9 i! T9 A& I. m8 r/ x2 M6 A; q7 Z
- 'projection' => ['_id' => 0], //不输出_id字段
- o1 h2 |# T0 O4 I" o( P - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
. [) d- _9 U% h' a' i4 X9 w - ];
% y7 [! m4 A/ D) j, a' z& w6 ~+ F - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
6 q3 a$ A, c# U& P4 _) V9 R - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合1 ^# C# |" @- N0 F
, O; R7 }5 h( X) e5 w- ( g0 ?( S3 y, e' A& Q( c& f
- foreach ($list as $document) {, d6 c2 G: H1 q. J
- print_r($document); - f% }3 A% X* _( {& w% g
- }
复制代码 - G) v. W" Y9 o
查询更多条件使用方法,参考第二节mongodb基本命令,查询
1 I0 x; u; L% v; F; Z! K* o* d% y [$ T
3:添加
; Z( D0 c% z- a1 T
- @1 p C9 h+ Y1 u8 d- <?php
8 c$ p: M) n: m' \& o# A* `
" Z; @4 D; Q' ^& a1 a5 G- //链接mongodb# @$ G2 i: p0 s# O8 ~) ?+ b, ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 B4 X; N+ [. U* F- d
9 d% J! f. V7 C+ V+ D- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
1 o+ k, J7 ]& T" G/ i) M I - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- ?/ W/ t2 O) k1 `& y3 P8 V - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
, q' m5 C. z8 `7 E! j/ B - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);0 ] ~# L' T2 I* e+ _
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
2 j; p/ R/ V: A3 c1 \4:修改
, _4 z8 g( l% \: F- \1 v) z' G" {" ]2 n, D* B! w+ a
- <?php7 y+ J; u& [( t* W
H) o' L2 V3 U7 B' x- //链接mongodb
' s( Q& z+ x0 P a7 N9 p - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
( O1 ]) F ~2 _0 x2 D - ' ~, l2 N! j: k5 H! b8 E4 b4 }; T
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
& ^- U- v1 R& [" M# `% E - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 o( o+ b7 F* y
- $bulk->update(; p W/ ~! f: c8 k6 E6 I' m
- ['user_id' => 2],
7 B! V+ `* c% U$ e, S p - ['$set'=>['real_name'=>'中国国']8 ^6 z8 L( U# v( P2 [
- ]);
, [* D( p) N/ s( E W5 }8 u5 o: x - //$set相当于mysql的 set,这里和mysql有两个不同的地方,4 ~ X( E0 K6 T; Y: R- K* D' _7 _
- //1:字段不存在会添加一个字段;
1 V% n' @6 j; [+ ~3 B9 c4 u) o - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
3 H4 J7 n0 P% s$ q- M
! } x5 Y5 ~5 _4 J" s
! R& C2 q0 a B/ F9 v4 d' Z) _- //如果条件不存在不新增加,可以通过设置upsert6 G& F9 d/ a+ } W- T4 Q
- //db.collectionName.update(query, obj, upsert, multi);& E5 i7 y" R# t& K8 U8 ^3 S
- " R7 N# L2 ^! O7 \% V9 g: K& G
- $bulk->update(
. ~2 ^) ?" n4 d1 ~9 a% G - ['user_id' => 5],
, X1 G+ `4 N2 [, D - [
0 R% o/ j5 a; L - '$set'=>['fff'=>'中国国']! C7 V9 n/ p2 @" K
- ],
# n, h( E/ ^$ x" d$ o - ['multi' => true, 'upsert' => false] 8 C/ `, J7 p6 k
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条1 r5 A/ H2 h7 y9 f
- //upsert为 treu:表示不存在就新增
/ C# {7 |. c: q - );
2 p$ I: \, r# t& A" R( q. |0 E& q - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ e6 @$ t0 R% O& @! g1 S
. @9 v7 B: ^) zordered 设置
" Q9 o* W6 k$ V9 Q# C( o5 ]& _8 O8 |& d6 s
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 B( ]) Q a3 f) x$ k% M2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行; f. G5 R4 |! u0 K3 w0 l
0 |4 g$ O& I' I* C) n
5:删除
* N' s: E& l+ | t! r9 i
. K H6 L6 _8 o. k- <?php
4 J$ f, S; `0 r& I3 W- ~" C: G" ^6 O3 J
% b) h0 i" W" {' c% W- //链接mongodb3 m5 P A j* H" c, d$ T
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; U8 H$ W/ l7 h, U) Z' F& r
- ( ~% y0 m) M4 S! k' g
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, Q( N+ Z9 a# }( J+ W* Z& G! {5 j7 m( y
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
* z* O# J( r; c O g4 p5 V - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
- M# z- d% y0 T* x l: i6 }2 q - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合# ~ B$ T( [ |; M
- delete还可以通过limit设置不同删除方式
8 Y8 u: C# J X/ L* v8 z# z( }
4 V$ p& Q% ]' O( s- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
6 P' B3 o6 x7 x! \ - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 1 w) d! ]+ _& }% B: @
1 F9 H# D7 ~$ M7 g/ C7 _* Z! A6:捕获异常* ^9 Z2 V( h5 n6 `
7 T4 I1 m; ~! d& A& J' h5 z
- MongoDB\Driver\Exception\AuthenticationException
3 a' L ~# w; i2 n: ^: N - MongoDB\Driver\Exception\BulkWriteException
& D- s0 ]3 j' T8 @$ \0 Y - MongoDB\Driver\Exception\ConnectionException
+ Y4 m4 g! ^8 A4 v) R - MongoDB\Driver\Exception\ConnectionTimeoutException
) g% a5 x6 _1 N& S3 Q) g8 c - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
t7 @; t Y6 A: S3 @, f - MongoDB\Driver\Exception\ExecutionTimeoutException& X- S( [) K' R$ m" p
- MongoDB\Driver\Exception\InvalidArgumentException
- x% H! X# C8 S5 x: ~ - MongoDB\Driver\Exception\LogicException
" u ^' U, f3 O - MongoDB\Driver\Exception\RuntimeException2 R0 T4 D. Y/ A* \
- MongoDB\Driver\Exception\SSLConnectionException1 ~" ?- P5 i7 `# H D3 ]6 [5 B8 N( B
- MongoDB\Driver\Exception\UnexpectedValueException
9 } v+ T' \4 [# f4 D' F* I) L- } - MongoDB\Driver\Exception\WriteException
复制代码 3 i% t W+ j6 q6 ^; g
' a7 ~1 Q' n5 I+ q$ T ]' m5 _+ g" x5 X, \( v2 D
点击查看全部
- H& {3 C1 T" O; Y, y0 M+ Q: z9 c6 q4 m) a: v' Y
& A8 `) a. T. P+ [ |
|