管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
9 I3 s2 [$ P& X4 Z3 r' {& g; j0 V. p3 Q7 X) v
下面用PHP7新的API总结一下:
& R, T& B& s$ M+ C+ s8 j! z% d0 C
一:CURD) c; r# w; e8 c% n5 t
4 e2 Y7 O1 ?) i4 U& Y8 m) a1:链接( J4 i$ V" o( |3 {9 C" {
: E. x0 b) Q6 h2 W c& [" Z- ^0 [! e- <?php
& I8 D9 `5 C! ` - //链接mongodb9 k5 X5 Q7 H! [3 C3 c
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');5 F: Q: |7 _! |8 o3 |4 u
- root 用户;123:密码;如果没有密码则不写
复制代码
+ P) {7 o9 l& R, X- j1 y
( X$ J. m: A& e% p% j; Z3 b2 C2:查询4 {2 r3 Z! p# m6 L$ U, ?$ V
% `- G. k) N* e* ~# p* c- <?php2 w, c3 Z! p) W8 C9 B- S6 S$ t( S3 E$ d
' U& C w' n9 G. J+ \- //链接mongodb
; s+ r* v$ ?# L - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# I- D1 ?2 j! y. u
- , a( S$ ~8 k0 H* ]
- //查询3 E! i7 N4 @! I# o3 s. b/ [6 H
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 D, f+ [' S' A- M7 O, G( {
- $options = [
- O4 K+ u1 ]: W - 'projection' => ['_id' => 0], //不输出_id字段
$ r4 [ W- n( k! p" I5 b - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' n4 R1 V0 N6 b- n
- ];& I( l/ Y* ~0 t& c% P
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
4 E. y8 H3 r4 o# ~* x2 u, V* h [ - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
0 T- W" M7 m2 t$ w0 Q- ] - 1 x/ g U) `1 t: E
- % z( f) m# J1 _1 F; w8 a
- foreach ($list as $document) {
* L/ s% i1 W/ c4 {8 }5 s& h - print_r($document); : @1 m6 {( e( X; W4 r; B% I$ H
- }
复制代码 6 @, j3 B! t. I& O$ K+ _7 a' q
查询更多条件使用方法,参考第二节mongodb基本命令,查询
0 y- z2 S6 P# y1 ]) m
7 t3 o: X4 K" Y2 C. }# n3:添加# V( |" `9 K* W
5 Q9 c. p! V% k# i/ `8 u0 _* Z, t- <?php' h5 B& W- e( Q+ S6 K
, q2 Z4 _: d* v( m7 V" n' {- D- //链接mongodb
( h' V$ C- H% u - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 ]7 t! j1 z7 w; a8 X# ]. F
- & E# Y1 r- l1 L; v% e
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
- g! }; X+ Y6 z: ^ x0 c9 n- a1 H - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 G# ~) u9 h9 c) o3 u3 {
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);& }1 s- w" D `' c4 C" |$ H' \' O/ _% L
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
' p9 ~ e: d, _ [ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
2 H. o. w0 h0 ]6 z4:修改, {+ G5 X9 Z3 [ P j/ w' Z! K$ m3 r4 p& \
) V i0 I+ q; h' o3 ~2 {3 H( M- <?php
0 |6 j9 F6 y) b7 z K: J; b
' }& Y8 k/ w4 L8 y1 U6 L6 d7 ?2 i- //链接mongodb
" b8 M! }& C; C$ S - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
. s0 Y9 t! i8 y" w P. G - / e$ J7 ^9 i- W4 w. V: D3 Y
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
* B! k' Z7 H) K# s m+ H& ` - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 U8 i$ ~# ~- b9 }
- $bulk->update(
' P# t. s) X8 h: h. k8 [ - ['user_id' => 2],: T* A1 C9 l$ O6 l# |- V
- ['$set'=>['real_name'=>'中国国']3 S. B1 Q5 z; ~$ Z/ }( s/ p6 e) E
- ]); * D# P; ^# P* K' i, U, m
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,) y0 V/ Y( \1 z) t4 F
- //1:字段不存在会添加一个字段;' K0 |5 z2 |0 `9 S: |- q3 \ y
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert5 I7 e2 ^- M+ i' u% {& F# q
# V. F: h/ R A
1 c& Q& `# w2 I* z' W% K* i# g- //如果条件不存在不新增加,可以通过设置upsert
" E" |" L, i+ P3 W - //db.collectionName.update(query, obj, upsert, multi);) w5 T! S* ~( X4 I( y5 m6 S9 n
5 l$ I3 D, e+ N# N- $bulk->update(
0 L. n+ v; c3 t( l - ['user_id' => 5],2 C! t f2 K) k& R! \; v- o! z# D
- [
$ t k& ^1 q0 l" ]5 T: _* D - '$set'=>['fff'=>'中国国']
# y. u- A/ R* v/ O* A- B - ],
7 j# m/ ^ J$ L* q. d& r6 U' e - ['multi' => true, 'upsert' => false] : t; R/ w3 u) W
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
3 ]" b, O( ~7 C. }3 i - //upsert为 treu:表示不存在就新增
& R1 H' _' V" f% d$ K' S1 ~/ @ - );- _5 u9 b7 i7 d: O1 M8 K# v
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 K- x! M: y3 v" X9 @
0 b0 z/ M O2 Z4 I* D, w# d) y7 gordered 设置
7 w0 {4 |7 A5 \( @5 _
+ |+ |: m) H8 `5 o; n4 f! I1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
2 }3 L+ F' X% p$ v; V6 W5 ]! b2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
9 W- ?2 e" a4 j8 I; b/ ~; {; K* i; c: N! _
5:删除0 T" G% l! C: ?' K; o% g) W! _
2 ~3 L x% |2 O& e h0 U8 b- <?php0 a* x" i- H9 c# X1 |1 R
- : h4 l3 {# O9 W d; d
- //链接mongodb* j* U4 d7 B8 ^' P, `' }) i( L# s
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
% S& Z* T# I1 j. R+ r" b8 f
+ R p$ {% j% J- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% d* l' o, T) k3 b: w
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- m/ Y7 Y+ b- I$ V9 k1 \% C! { - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段) w2 I4 r& ]4 I3 U9 G3 K
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合% J k0 W0 j0 {) B; T
- delete还可以通过limit设置不同删除方式
) _3 N) o( H" q
( @0 B# Y+ h' J' O/ o0 I5 l- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据) Q& U+ g+ V3 z t( d F, y
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
# b% f: s8 W7 ?3 j9 @0 |: k; `0 D$ Z7 C) G( d6 w P/ H
6:捕获异常
$ Y. _# U. a) X% ?% I0 h4 B# L. O8 A K5 k0 _
- MongoDB\Driver\Exception\AuthenticationException
* n2 [9 ?0 D% ?$ S$ l - MongoDB\Driver\Exception\BulkWriteException
. \! `* w8 X! h1 L f - MongoDB\Driver\Exception\ConnectionException) K5 p( _/ \3 j9 S4 n+ r
- MongoDB\Driver\Exception\ConnectionTimeoutException" @6 c# Z( o; U& [" K0 n
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
" Q: J8 K# Q N6 f: C8 q9 ?8 q4 X - MongoDB\Driver\Exception\ExecutionTimeoutException
5 D4 _) A% a0 l4 l7 C - MongoDB\Driver\Exception\InvalidArgumentException
$ F/ {% I7 }/ R$ }% S$ H. f - MongoDB\Driver\Exception\LogicException
6 f4 L F/ d& v - MongoDB\Driver\Exception\RuntimeException
5 m9 ]+ v/ O, q" ?- P- g- o% \ - MongoDB\Driver\Exception\SSLConnectionException' y* | R5 q5 r9 R4 t; T9 U$ p# q3 Q
- MongoDB\Driver\Exception\UnexpectedValueException' } ~2 _. `4 m. p& G$ U
- MongoDB\Driver\Exception\WriteException
复制代码
- j; D* w9 E1 W- C0 R7 S# [3 a
8 d. |6 y' \8 t; ^: E5 j7 o4 ~4 `6 F5 R" e
点击查看全部
# `& w1 G' {5 o# T2 Z9 e% ?+ x5 C9 `: T: J0 Y
; E9 P1 u$ n* h
|
|