管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。5 r7 w; a7 A9 t; |: w' w; n& b! D: b% S
$ w i) m# Q- b- h$ }" q+ G g& c
下面用PHP7新的API总结一下:2 A' c9 y) Q+ T3 S4 I* h7 ^
2 }! M% ~ k `6 h. R一:CURD
- S1 B$ V7 V( h/ o. ?; t6 Z3 Y3 W& \# q' ]7 S; `% `6 Q' Z- b
1:链接; Q b8 N i. T
6 E9 v* n" o! L! G h- <?php
7 Q6 r2 |6 Q5 ?, e$ S* b# u( { - //链接mongodb
; T. g1 j+ c& J4 j - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
$ }! P ~6 m" e5 m; }% c - root 用户;123:密码;如果没有密码则不写
复制代码
( O/ v" T$ O% Q! z# g- _
7 O( R U5 K2 T ~" U2:查询- O9 O6 \# s/ p3 Z
! \: E: V+ H0 v& j3 b, r
- <?php
* c6 v v. z: p* _6 U - / x' }0 ?; ?$ K( G% i
- //链接mongodb
/ i! H, i" x3 y7 ^) B+ R - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 A" M$ d" |- }/ Q% _0 M - 1 M7 r) \5 }+ \+ B/ R& Y. Z) f* u
- //查询; V- L6 W$ d2 m* h5 G4 j
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0+ e+ T. H% C7 `) k- _
- $options = [
1 z- [ ]' P; ]8 M: g - 'projection' => ['_id' => 0], //不输出_id字段& i: c! l+ ]) G( o$ V$ F0 j* \
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
* `' _9 a. C: y - ];% s! B# T6 O7 h% o: S! P
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求# h& e, ?4 d* p. x5 A* }6 w/ s
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; m( q/ `% E( r2 O$ e
6 ^9 K# J0 k) m% Q( [/ ?- H' z! V/ E5 k
5 {9 X8 j9 H c8 s- foreach ($list as $document) {8 A6 ]% B" ?8 b; y6 B$ o) \$ }
- print_r($document); e* j. |" a" W3 m
- }
复制代码 & F5 v3 C/ D+ M9 g1 |# P! d3 x
查询更多条件使用方法,参考第二节mongodb基本命令,查询
* w3 x3 w2 T; d, o& Z* V- D8 v& W2 y% r6 B
3:添加" @: V7 o0 v9 u. w: \+ V
$ T+ W6 h+ E7 R( T: u5 S! u- _- <?php4 G& L' u* b c$ R3 H/ `, M
, S+ b: F Y& \/ d1 [2 Y- //链接mongodb
2 \7 [/ E/ A4 E* E! {! M* @. c - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 F! Z5 _+ H- K7 q- n! B
- - {, W' |5 n& X) [. }+ H A
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
( S V) U ^7 B - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 x+ y. G5 H7 [/ L
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);, ^5 a( n/ p, A( I; f9 P1 T
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
( m; M$ y% Y5 U A6 y' d - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
3 w* n6 ]* }! b' t1 t6 L4:修改% k. |( x0 L% w
: T1 t2 V+ \' d
- <?php
8 s. R3 c7 t4 O
w7 U$ A7 V5 F Z: g. f; v- //链接mongodb8 S7 U9 y3 R5 m; m: h
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
; A5 U$ k$ S& E: {6 h4 H0 y
# B+ a4 l. U8 Z- q- Z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
u4 l- z, p5 y3 n; m - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, i* B' {/ p2 | t! e
- $bulk->update(5 J' T% ?: V9 W- I8 H. V* a
- ['user_id' => 2],
4 Q. Y- {& o; e) g7 L1 N8 x& | - ['$set'=>['real_name'=>'中国国']6 R# @$ K2 y) W8 F# P# _2 ]
- ]);
! o d3 u. d3 m, V* n; b - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
+ ?" L3 W2 G3 U) X9 p - //1:字段不存在会添加一个字段;: d" L' _/ B. N7 W# f6 t
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
2 N; V# L0 L8 s) `" ~$ W* S$ k
" E# _3 {: h! l
2 n$ K3 C$ o! [# y- //如果条件不存在不新增加,可以通过设置upsert
7 ^0 w9 n+ }; Y2 `) d0 f4 ? - //db.collectionName.update(query, obj, upsert, multi);
u/ y s9 E" Z" W' L - ( m+ i# g7 g- [7 K7 A
- $bulk->update(6 \7 j r+ a( I7 ^0 _, m9 J8 r
- ['user_id' => 5],, ~& N7 b2 _3 \
- [( Y: I' N0 p! ~3 C) \
- '$set'=>['fff'=>'中国国']
p8 v8 y4 |( B* W9 c9 U- E - ],! q- s+ S" O+ m1 r0 w8 p8 r
- ['multi' => true, 'upsert' => false] ( x& W" }' P7 ~' ~# I
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
& g" N/ s* H0 x8 d - //upsert为 treu:表示不存在就新增
% k( {2 M# n9 V/ d w Y - );
1 V4 ] o/ _9 B' b4 d7 F1 I - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 F3 Q9 X- i6 T3 T7 b6 E6 y' p; @, `, ]& S
ordered 设置
( s" }, v; [% h e* f2 v- r& [( P. g) J( m" u
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
$ q/ V; d' ]0 z7 E1 d# d2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
& p' M8 e* x- D8 R7 H" R( W0 t( d- k6 p; ^, l7 r; D, d! r ?6 y
5:删除
, `0 j1 D7 U) g2 J o) u) A
' `) f) L: d, [8 _! I9 w& F, F- <?php2 \' h, l2 ]% M0 i9 q* g! S0 k
# O7 }& ^( c" \6 i* l" s; R, W- //链接mongodb
. F9 _4 t# `: R, A - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' e6 z; R) }0 ^) L* o, J5 s
9 w0 Z% }% q. h- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 ~. w0 |% r% Z/ W% x2 r
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
$ M6 Y# D [5 B1 a$ r' @! I& O - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
g0 t6 D/ \7 i/ P - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
7 o! ?$ j: {, d - delete还可以通过limit设置不同删除方式
/ Z2 \7 Q9 q7 l% y: d& S4 ]+ v* e - + ~' }: R: G$ g5 ?" _2 h j
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据, S v$ y! H8 M* e2 Y
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
7 r. t% Q* g" x3 y0 ]9 W
" X/ `2 _) g5 p# |% E! }" b% g' {6:捕获异常& B2 c) F' ?7 d$ r, F' O" h
~ V7 A. ?* U, U* _* j) C- MongoDB\Driver\Exception\AuthenticationException
- T; k H6 f8 \: l - MongoDB\Driver\Exception\BulkWriteException& f- D- E! a m( L. E1 O
- MongoDB\Driver\Exception\ConnectionException
; C; j- y5 {* F. F# m; z" R - MongoDB\Driver\Exception\ConnectionTimeoutException
! d. \; E6 ^! D+ S0 j2 S) e - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
6 p) x* o& Q( @% j - MongoDB\Driver\Exception\ExecutionTimeoutException( ]4 ]5 _/ _' J: O& S8 o8 E5 x
- MongoDB\Driver\Exception\InvalidArgumentException7 v! F6 T3 [ a. M; C+ S" K
- MongoDB\Driver\Exception\LogicException1 k7 t' a' T' I R: B- ?( c
- MongoDB\Driver\Exception\RuntimeException, m9 J. z+ D0 p' @
- MongoDB\Driver\Exception\SSLConnectionException$ d" A0 j/ k+ v5 |0 K$ N& [5 H
- MongoDB\Driver\Exception\UnexpectedValueException9 O5 _0 ]" z3 n/ [) h
- MongoDB\Driver\Exception\WriteException
复制代码 $ L+ w) n+ ^/ i: D& z
2 B4 Y5 Z: w% L' q7 {; \' a: w+ Q2 D
点击查看全部
( c: a% n. q; g2 o6 ?: t2 a, X* K7 z5 J
( k% q7 [4 H0 |2 E5 j
|
|