管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。# C# e2 o( Z0 Y5 u* A% e' T3 i
( O7 y% `( l: F( u+ L/ O下面用PHP7新的API总结一下:
" S+ w) T# r& }; W5 I* J
, }! H9 x* l9 C4 X+ D一:CURD5 E$ N9 r. D# E' r+ A, @3 S
! ]& E. _, @) v# q1 t3 R1:链接
3 @6 {/ j2 {9 o, S: M( p. Q' ?7 S: q: _. S- F4 `
- <?php: T& x" S R( S" B$ I6 q
- //链接mongodb# @2 v H6 I1 D% f. I
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
' Z3 I# d* Q3 s; M& I3 M% D - root 用户;123:密码;如果没有密码则不写
复制代码 4 Y) o' ?! g2 p4 H
4 t; e7 \ u: o0 k! t# d2:查询
5 s8 ]" s2 j+ H4 N2 s. \; m! ?0 y/ Z# p1 C% w
- <?php! ^2 z4 ?: c! T6 J" Z: y. r; l Y
- 8 U/ D" e$ o* E3 ^$ h. ^
- //链接mongodb3 t8 \$ c+ H5 [3 v
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' O5 D' z# n- _$ X! y% T A# A - " d' t5 J# P3 h. l4 t8 Z2 \0 V
- //查询8 z8 t6 I5 s2 H; y" m* ~" ~7 ]
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于09 k# ?5 f' X ~/ s S# Y$ g
- $options = [1 N8 D$ Q: ?+ \/ H; z
- 'projection' => ['_id' => 0], //不输出_id字段; I- l/ \7 Z) A
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
/ \2 C8 a4 N1 [: Z+ Y$ t - ];" m! T" z1 f" k& Z* p
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
2 I# h& \9 G- O2 p8 ^0 z - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
( j9 E2 i$ J! A4 P t) ^ - `8 N' i }( a/ {: R: w/ ^1 E) P
- : ^' D+ s# C& L5 Q
- foreach ($list as $document) {
. m5 _! }2 n" x s! x6 r - print_r($document); & J6 L r3 E3 ~, h: }- H- e+ |
- }
复制代码
& u. g1 ] @/ o- J( I+ @查询更多条件使用方法,参考第二节mongodb基本命令,查询( [ s9 \8 F- J$ \7 f
2 e6 O1 Z7 O( r. x; v2 g6 G
3:添加
- h% a8 e: B6 w
; z; ~+ f8 M# A* k$ L# w! v- <?php% {# X4 ~9 X H1 _
- / ?. d9 @9 F! R' J/ |
- //链接mongodb( U8 c8 r6 I8 |9 A2 o% ^6 `; ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
( ^3 Y6 J3 d/ o7 @5 c. p9 D* p
7 t/ H! @ [4 b5 y3 b* _' n- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 q( Y1 A B8 \" m9 U. j6 v, w
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 B7 Y* V" d3 F8 ~8 z/ p
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
; @ f1 f& e* q1 C3 Q2 j# K7 A - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);* r/ n% [0 y4 V4 G
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
) C$ m% W9 L- X* o5 T4:修改
$ Q. n7 N. G. {" _3 B, z# J5 ^ F. V- ~" d' g& }
- <?php
6 D- @* G. D6 `: A
+ ]# o0 I5 D7 {; Q% P/ ~$ w) Z* c- //链接mongodb! e: p$ J# p; f' o& h$ B Z0 ?
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- e( m- K/ e1 G! L - 4 L5 m$ ~; O( H# \% u% l
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- L8 g4 d6 {( _: x: s9 Q" m
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. x; {! O9 `' {$ p# C! |, Q- n
- $bulk->update(
, M) t3 ^$ B H; `- p: f - ['user_id' => 2]," v/ S0 ~' j' L% G# y+ V# j
- ['$set'=>['real_name'=>'中国国']
/ t9 ~7 {+ P% g: d; o. h - ]);
a1 S5 f0 ]( M1 P7 G; G, Y. [. } - //$set相当于mysql的 set,这里和mysql有两个不同的地方,- a, z" t4 ]- q. j* p
- //1:字段不存在会添加一个字段;. [5 z4 L* s2 W! `9 W) {# M5 h
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
/ d: d0 N3 g* l! A - 0 z# f4 X4 \# K; B0 p9 Y1 X
- 9 m9 @+ b5 s- U0 s2 b2 Z) h6 b
- //如果条件不存在不新增加,可以通过设置upsert6 ]8 G3 \) [5 \0 ~ H$ ~
- //db.collectionName.update(query, obj, upsert, multi);% [( Z# }- e: q# T
+ z& C9 v ~! a/ E- M. ~3 Q- c6 ?% c9 h- $bulk->update(0 |2 [6 ~9 `$ N; @2 W: Y( T
- ['user_id' => 5],& X. O& j7 j; L5 A) l/ c9 H) R
- [
2 D: A7 I: v! X! Q; m$ Z6 y% q - '$set'=>['fff'=>'中国国']
; \+ ~* x! G1 E7 [1 q( z - ],
1 n; w% T8 S( x% x3 V - ['multi' => true, 'upsert' => false]
" Y c& y) h0 t- h - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条9 m- \) v/ Q" `2 d: W8 e& C9 \
- //upsert为 treu:表示不存在就新增% e+ Q1 t1 ` s3 Q; J. ]: c
- );
8 |& P N" J: F2 S8 ]! A8 z. x0 z - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
& _9 E2 F. [. h1 A3 h0 A7 J4 L& e4 I* g9 @7 C2 T: @" K
ordered 设置
" r4 `- d; q5 X3 x) x$ A3 U* F0 u3 \5 t$ O0 |
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' F4 H4 _% u# ^2 y3 G5 b
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
3 D! l+ q' r8 P/ }
. L! I2 E9 I; R5:删除
! V. b8 |4 T9 R! U: i+ L+ K
" |9 t% W) ]8 Q9 D2 w- r! k: y- <?php
6 e/ v7 c8 |, x% c. r. T9 o/ X
' I* B; Y z a3 a! d0 {- //链接mongodb
5 ~; \6 T o h) m; w) Y - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 ?3 Y/ X' A( o8 q/ Q* ]
% t- l. `- z" p. {' Y- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行: ?" s4 R4 T: e/ U3 U
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
" s0 D8 }$ P u - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段. p; P1 n5 O; }& ~# _# G! F* H2 y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合. A+ M, j% A$ m' _
- delete还可以通过limit设置不同删除方式
. ]8 V- K9 g2 k: Z4 e" [) @; y - + e& x. ~0 B: q( q# G4 Q! x
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据. |: Z! G' e1 ~/ ?0 }: c5 R$ S
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
' b k4 l$ j) }& u6 I8 a# |1 y3 m; ]" y- v5 a# T) Z* V' F
6:捕获异常
* R/ f i- B% \: O" h5 e( k) a$ s9 [" D/ p4 ~: W! m& U
- MongoDB\Driver\Exception\AuthenticationException
% ]- P. d, W0 ]. T - MongoDB\Driver\Exception\BulkWriteException
: @0 L" ]' ^4 y - MongoDB\Driver\Exception\ConnectionException+ U3 k5 [2 k' B Q% _
- MongoDB\Driver\Exception\ConnectionTimeoutException
* M1 y/ c# Z0 _6 | - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
( r' ^9 }* ]% w$ P+ T. H4 l - MongoDB\Driver\Exception\ExecutionTimeoutException$ u2 E5 g; E; f) k1 |" L
- MongoDB\Driver\Exception\InvalidArgumentException$ K2 R( s6 J. z0 U( m
- MongoDB\Driver\Exception\LogicException; A: ?7 m/ l8 X1 k/ f+ `
- MongoDB\Driver\Exception\RuntimeException7 a8 u! ~4 |5 P$ k4 S
- MongoDB\Driver\Exception\SSLConnectionException
% w/ Z- ^0 q& j& K! h+ y - MongoDB\Driver\Exception\UnexpectedValueException
; x% z5 E3 z7 g1 ^ - MongoDB\Driver\Exception\WriteException
复制代码 ! W( a! @5 ]5 ~* O4 X
3 G9 ~7 f3 W; k5 A: o e* }. Y+ h& i
! M, N. e7 c" ~) |- P8 T' {6 B* z- }
点击查看全部
% x( l: {7 a8 Z# `+ w. a1 p% e% N& h8 t' ?
- e' J4 |" s4 `" ?& q) F. f- \7 C0 s |
|