管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。2 ]/ E( _' _! U+ a& G
- U$ v% \; ~. O) | a% D2 J下面用PHP7新的API总结一下:/ P4 A: u$ g; M, n' N4 U. H$ R: M
* Q/ Y7 T' C+ \5 l* u$ v
一:CURD; K; ~. m2 L3 {7 } U! m
) ~, l. I# E7 Z6 K Z3 }5 p" r1:链接4 S4 M- T& X- A; u- g9 t4 Y
& ]6 E. m3 T% z4 n6 t
- <?php: Z7 A$ G3 U: B
- //链接mongodb$ ]0 I9 U0 l! s e! l2 S! ^" o: [; k8 J5 r
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
- r7 ` E, u1 Y# A3 g6 _) t7 W - root 用户;123:密码;如果没有密码则不写
复制代码
3 {0 q$ A/ s+ g, h; k# _0 {! s" F( r% k
2:查询
j& ~, ~( h& w* M5 ~2 w& u* o& v$ [5 K$ m8 P% u
- <?php% G2 E S7 M6 B/ ~- c" w% R
% J1 p% q a' Y, i- //链接mongodb
5 u' e K9 J- E - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 G4 F2 g% p0 Z, t$ [
- & q! p; z5 ~, O; L( n( T
- //查询# R2 F, r5 O) P0 r, E* L
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
- Q( K Y, g# q, E" O1 X - $options = [
- C" j: V( \/ P# Y - 'projection' => ['_id' => 0], //不输出_id字段0 G" m3 {. M7 d8 g
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序6 e: G& W/ ~% q5 `, ^8 V
- ];
, t! W2 g; o) X. o0 o# N" Y - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
/ W3 z5 f5 t* A% e - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
7 `1 Y( c+ d- T6 f4 j4 q; \
: \. F; s' {9 r" n/ D, O3 m
5 h, D ^- D2 L- foreach ($list as $document) {
, h) d$ X# r- {9 N9 P5 b& m4 p - print_r($document);
q# a: R) T- ~( ?, S& t - }
复制代码 4 o* l4 z5 u5 w( d
查询更多条件使用方法,参考第二节mongodb基本命令,查询2 C9 Q& O9 m* v/ o" e' Z4 [
3 @% Y7 ~* f) Z) e
3:添加
; H" L# S, j2 \8 D% ~% b3 W/ ^/ g/ J; f& n
- <?php. P9 y4 ^5 v& T9 r/ X7 g
* G r, T8 a8 k$ ^/ A4 t- //链接mongodb
8 H0 q0 ~* z& M* m1 q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
h+ D. i y/ E
& u8 r7 K5 m" H0 P U- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; D x% |& `; N( ]# J9 w J - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 p, O3 x6 t6 z; z4 J4 {5 b - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);8 o* c Z1 n' J) G; K8 p
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);" J2 U9 m! ]: f! Z9 ?4 ~0 a
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
' L a# p3 n. g. z4:修改5 {2 V3 L$ b2 ?+ n: Z6 Y8 M% Y6 {
( }" w! X( r8 f+ C9 B" R4 s- <?php7 Q" D. K; j, G# {, I! E/ L
! F6 w( [& V* [- O- //链接mongodb
) ]# v: ~- P0 T% S, Y4 u8 u9 c - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
2 q3 X2 _3 `3 M) B - 5 A( f4 S8 c( a. C. W/ E
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
- t. X1 R7 v/ _, F - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
$ |! w. j5 Y. F% U7 E9 {: k2 Q' `' g - $bulk->update(
+ F/ W% Y& C7 ^3 o; z - ['user_id' => 2],
1 t9 h: r+ `5 h7 j$ R) K8 z - ['$set'=>['real_name'=>'中国国'], |) s, E+ C5 _0 I
- ]); 9 g. S& u& \' C
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,# {4 @% m) [/ F0 z6 Y
- //1:字段不存在会添加一个字段;
4 w2 u! N5 t9 v - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
; L8 W! ]1 Y @: l4 o
5 P6 l+ s( L* [4 T
d& g7 j/ t7 g0 ~3 ^' J" J* x, C- //如果条件不存在不新增加,可以通过设置upsert: e( {: @0 F d2 x% m" @7 q! r
- //db.collectionName.update(query, obj, upsert, multi);
6 S" k- M1 J% s- ^. X
7 N+ y# \# A3 h8 O* Y& f5 K! P- $bulk->update(
1 o" E$ M, C- \/ V - ['user_id' => 5],: g6 u& Q% N" N# G' K
- [
5 k4 @& z& L) ~ O+ @+ x. i - '$set'=>['fff'=>'中国国']
% O) d9 G( h/ g; j$ X1 u/ d - ],$ ?9 |( w; @1 v7 v. y. t
- ['multi' => true, 'upsert' => false] 5 t9 D% r6 D. A9 N
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 Y8 t0 F, |% A
- //upsert为 treu:表示不存在就新增
F% w4 V( w0 d$ M9 O5 R/ |8 a - );
. X" l6 j# e) y& W3 Q4 z/ k - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 4 z1 u1 V2 j/ ]4 m
' }6 e8 Q; z# }6 G$ `6 hordered 设置8 K* U- l( v) q6 j
# Y4 k; A0 D3 Z& C1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
$ X- a9 }- T' @0 M5 U2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行7 k1 v N3 Z6 }( W: ]2 d
& o4 K A( ]6 `; c; G1 j \5:删除! @0 J! t/ j, w9 U, `
! s- w7 T$ c0 f: t/ z- y- <?php
7 ` B& j Y2 W0 x
* W: m- Y9 C3 o" t; H+ |* B) F' `- //链接mongodb- {/ R- p; L3 t) ]( p! m2 q, D
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* I. v/ R' y0 V3 G9 s
- + S7 k+ V* E: C& t& s4 V+ F( `
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
& p, x. d% V& q) N, M# j - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
, ?! q2 n- N: u. }- y: U5 K - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
' C, L6 o4 K3 g - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合7 [% n* z' `" f6 G
- delete还可以通过limit设置不同删除方式
: w, `+ h2 w% d. o& K3 J4 Z
, M2 |' |7 W% J- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据3 n: f$ a9 X9 S( _1 Z
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 - m( i% |5 k S% ?0 n$ S
6 y2 y1 f; ]" G0 ?& k. {6:捕获异常* f! t/ {; r' m2 d5 S6 x
/ K% ?. s4 k6 K( o' @/ ~* ~$ h
- MongoDB\Driver\Exception\AuthenticationException9 F: G# g* @$ G# X) v0 a. n
- MongoDB\Driver\Exception\BulkWriteException
* P( p) N% J! N- R& S5 b, h - MongoDB\Driver\Exception\ConnectionException
4 J, W4 V/ ^; Q# p0 Y - MongoDB\Driver\Exception\ConnectionTimeoutException! t/ v6 w \2 w* B* B. G u; a- J
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口( t: l% `. R2 ~2 K) d8 R* ~
- MongoDB\Driver\Exception\ExecutionTimeoutException |) W1 t$ D6 i: W# n2 U" @% `
- MongoDB\Driver\Exception\InvalidArgumentException
* r6 m4 J" o4 X9 J" F! `2 \* H/ M - MongoDB\Driver\Exception\LogicException
: V i3 @+ E3 i, ~ - MongoDB\Driver\Exception\RuntimeException# p' ]" D* o, @. ?/ J
- MongoDB\Driver\Exception\SSLConnectionException
2 V5 E/ o W8 [1 ]" d2 E - MongoDB\Driver\Exception\UnexpectedValueException. k S& j( H) ?7 ~ |
- MongoDB\Driver\Exception\WriteException
复制代码
( `* w7 y( e5 V$ y+ ^+ |% n2 `* }' S' @& E0 ]& Y6 Z( {3 H
: V" r0 Z( X9 p9 t' L# n! f
点击查看全部( z! d4 w0 b- e8 B8 n' h) B4 s
( [6 c& _; G' p; A9 `; p
- l- {- E$ ^' f: c9 u# ~ |
|