管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
( k$ `- @4 f9 p0 } ]1 i' s, Y
; @9 N3 K3 ^- a$ y. w0 z下面用PHP7新的API总结一下:
2 G- ?4 P- c* T8 }* H; o; @/ j& }, a9 q; x9 b3 j7 a+ G
一:CURD1 `' Q. e; |$ h
, z3 P, m$ R ]) V9 O5 ^( k1:链接! X9 h6 {; R2 j% m9 `" ?( G
5 Y; G$ m3 T4 p- <?php
0 t; M3 D; i$ [: a2 t2 i( v$ N - //链接mongodb5 D [/ L5 W$ n1 T* p
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ P! z9 I3 S2 j- {% u* O& n& y/ g
- root 用户;123:密码;如果没有密码则不写
复制代码 9 T% D; E( h9 X' Q: i# A* F
* E. ~' V/ \! h3 d2:查询% C2 j; J+ X H3 J! N
. D- U! L( ~1 |9 l( y4 N- <?php; b U m/ \6 t
3 o9 {; m. _/ a1 d; e. b- //链接mongodb
+ j! H% J; s7 \# W0 | - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 Z+ I# ^1 u* y5 \ - , S# E9 L V, N* x9 C" M9 n$ `6 D
- //查询7 i }$ K( g8 X
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0: `! \2 i: q: P# r1 H8 |
- $options = [
& \ B9 q7 z2 X% n - 'projection' => ['_id' => 0], //不输出_id字段+ K. A: S8 m8 u( ]) ^' j) J
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序& x# G* ]9 O y* o5 l, m
- ];
2 t- c6 @) `: Q2 C - $query = new MongoDB\Driver\Query($filter, $options); //查询请求' S5 {% @" d! V# L1 i
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合9 S0 I6 @! V; K+ Q, q( W& F. J
- 4 z' ] w# |: Y2 E4 l, o9 q
- & T$ w+ v Z7 C; c! z! J
- foreach ($list as $document) {
4 T9 v. e6 N7 I0 a/ R( ]# a - print_r($document); ' N: K7 w; q2 R
- }
复制代码
" {) G' G8 }$ A, ]0 C查询更多条件使用方法,参考第二节mongodb基本命令,查询
* o: ` g9 Z K7 k* Z6 X( c2 }2 W% _ Y& C' K& C
3:添加
) q" ?2 r7 H+ Q+ q( }* P& y
* }4 u1 I) O( M( p- <?php
# @: }! F$ u$ Y( F - 7 j0 l, a4 I5 g4 G2 y! g8 K: j8 _
- //链接mongodb! _+ _! r- }% X: }2 s" O% a9 A
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 j9 Q1 D" x' Q) z1 ~
- " v2 }4 T9 b2 u; k6 m
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ @, C0 M" b y/ t! D7 ~
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& _. S2 ?* N! y" e, X) j( E- [
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
# f' P% h4 o$ @) ^( r( P - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
2 ~ }6 C( S8 Z& Q - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 1 A5 ?( p# r% s! m7 |
4:修改
6 }# H& i5 g# Q( b/ B& C- `
5 O: d1 C, _9 h f+ l- <?php
# S- _: d r# Q" M' a: x0 d - 4 e- j) |+ D# V, a$ f, C
- //链接mongodb
% g: S- |- [: z0 ^+ e" v - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 W+ A/ _- y) {+ I: |
- B; P0 E1 g: ?, i. Z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
* H0 w" [* e; D- l4 E - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% q( }% R7 f! x* d3 Q: b4 u3 W - $bulk->update(/ w( \: q: t1 K3 {6 M' M$ _- ^
- ['user_id' => 2],
' {7 d6 R1 w% V; A$ r# |$ Y3 j' I - ['$set'=>['real_name'=>'中国国']
. g G- ?; R$ L - ]); 5 _+ Z/ i( [( ?: x4 r# N0 G
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
( L. N# g# C: |6 s6 x% B - //1:字段不存在会添加一个字段;+ X5 S' r; V: g' D8 c4 ~
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
% Z5 @% O4 L; @4 U6 z( H& l
6 H. ^4 D0 c k9 ~9 O- ; K' h" K6 M/ s
- //如果条件不存在不新增加,可以通过设置upsert s ^' r, c R, u8 R* H7 r
- //db.collectionName.update(query, obj, upsert, multi);
- K; n* _3 |' g1 p6 a" @5 M - + O1 H7 T9 D8 p5 n
- $bulk->update(
/ H# T" X1 O( j - ['user_id' => 5],
& @* ~8 I: E" h - [( T5 Y8 V) s1 V; u" }) Q0 u
- '$set'=>['fff'=>'中国国']1 M2 y$ T% `* a
- ],- ?9 B( L0 P' O# W, j, m4 ?
- ['multi' => true, 'upsert' => false] / Q$ X- C" G" f) e
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
1 f* B$ T1 { \0 T6 w4 q - //upsert为 treu:表示不存在就新增0 q$ W2 U7 t3 ^
- );& ?7 `! W" ]# g
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: f+ l0 L4 g7 m, n1 Q
% Q' N, y+ C+ |" yordered 设置8 Q |( B' I+ Q9 C" s6 V* E
! t! l; O, t$ V! f7 I! p
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。( @. t" J f4 z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行: f9 K" J& Q0 W
, A& q' ~) y/ a. r4 y$ c4 H5:删除
; K6 ]8 p/ m4 x4 E* \$ t& Y$ D4 b% K( C7 h: d. }3 ?- {
- <?php
, b" O5 Y8 p$ J8 o: ~1 Y. | - / C3 M& b' A$ X4 j8 ^3 [
- //链接mongodb6 `* X1 u+ l1 w
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ l: H5 P( D6 L
- & U. [2 m8 t5 _1 a
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 [1 @% j' u4 B
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
. X8 y+ m E5 U! t - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段# [ Y/ e7 |0 F
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
9 O/ G8 u: |% I6 f - delete还可以通过limit设置不同删除方式
u8 P$ M: w3 `* s: f2 N& o+ X m
* b- q* }: J* k( o3 |- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
& |9 O, K" R2 R6 P - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
( l1 \& c w. Z" X" }* V3 _% p% G3 O. A( P! z
6:捕获异常
1 O9 _4 t9 C) h9 d: X4 p: f' Q8 F1 u1 i7 x& S! ~( ~
- MongoDB\Driver\Exception\AuthenticationException( D* S! M* ]- U. o" a6 r; i
- MongoDB\Driver\Exception\BulkWriteException
( w& Q6 [2 ]8 c2 ~( P9 W+ e1 Z - MongoDB\Driver\Exception\ConnectionException
% I5 H1 T1 l I: I8 Y+ E+ N - MongoDB\Driver\Exception\ConnectionTimeoutException
4 Y' h% q* ?2 S0 t - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
2 I# p9 }4 X" T. j2 b5 W) Y - MongoDB\Driver\Exception\ExecutionTimeoutException: K4 R6 Q( P! H" Q" A* N
- MongoDB\Driver\Exception\InvalidArgumentException
. j+ u: [9 o% n7 B T - MongoDB\Driver\Exception\LogicException
( y8 L0 j& t( p& g1 L3 m% }% H - MongoDB\Driver\Exception\RuntimeException2 J. V* U7 j& h- u
- MongoDB\Driver\Exception\SSLConnectionException
# }3 m& H7 ?& y( Q7 N8 }6 Z( y5 C - MongoDB\Driver\Exception\UnexpectedValueException
! ]5 u7 A: s$ `9 `+ U - MongoDB\Driver\Exception\WriteException
复制代码
2 P" j6 r9 m3 v( P
$ i& o; O8 c# a S5 j! G$ f+ n2 W+ k4 C
点击查看全部
0 _1 \. _$ n: u# e
# m8 c1 Y+ L: h# r# L. N9 a5 @2 \5 \, | P0 W* N2 z0 R
|
|