管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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& D/ [8 ~- k! [ E
2 v( f) r% n7 w8 c下面用PHP7新的API总结一下:' e F& Q8 ?5 R
' a. R \) C3 O& i. \7 N5 z* _
一:CURD
3 x3 \5 T1 _& R7 n7 U2 ^) a% k) k! K; m5 K+ ~% N2 ]" k
1:链接
& A, l2 ]' g) K p6 k1 }8 _8 [7 U8 {
- <?php0 C; T x8 |' q/ w* f7 l
- //链接mongodb
4 l' i* C4 T# o, O$ C% ] - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 ~5 o. J0 Z. L, f! k
- root 用户;123:密码;如果没有密码则不写
复制代码
% D0 ?7 }. C5 g* P5 G; i4 D3 [
1 U, e/ ^4 G& J' J) _$ b" e2:查询1 v; B: G8 w/ }9 {
# J8 E) e- j: h. f. U- <?php
3 K% c2 M+ F4 h7 I
- n N; X* l: d- //链接mongodb/ T. D; K" Z$ j/ z$ e% q# |
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
: r7 ^& m: h5 h" N# Q! e8 Z3 V3 e5 P
E" z- @+ z6 m/ ~) T" t8 R' Q- //查询
0 z! \5 e) C/ w. L0 J$ w - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
6 o2 ^9 r( K( ?' \, O - $options = [
0 M3 F8 n* h: h; b - 'projection' => ['_id' => 0], //不输出_id字段
7 ~4 b$ C% q" G1 @- \2 x - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
3 S- q. ]$ F* d+ s/ Z, H) c - ];
5 s$ O! A! N; ]& @ - $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 d: O! c. h: P; ~$ y+ {. o. F- ^
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
; I8 V, {' G$ Y( q4 T - 1 ]( f5 V' G" x7 \
- - f% r3 K" @& X- i0 L* [
- foreach ($list as $document) {8 ~9 e% A8 I L
- print_r($document); % r5 x$ H# ? v% @( m
- }
复制代码
1 F! J" g8 i& N N- R; T9 c* x查询更多条件使用方法,参考第二节mongodb基本命令,查询# h+ f0 j8 P9 o" u2 B1 j" r
' q: R. o: \# e$ m2 J3:添加1 @5 F9 k1 q! E$ l! z( f: `2 l% R
4 x, T# l/ v! f! z$ o- <?php
7 K) N6 h. l9 O - 1 J8 n$ {! }8 _3 B5 j7 N
- //链接mongodb( s, H: m8 E3 l8 U* ~7 ~
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 W0 @( u* q) l
5 F" T2 O( g/ z! T- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) t5 g) X3 B/ t8 }3 i' a/ C
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
6 M' c+ }: r. Z$ [* y - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);2 ^/ |, D. j; I( ~, P ~$ q, }
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
$ w9 K; x4 L( z/ u$ v# ^ @ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 $ C( Y! s( F7 s" {3 E$ B6 F
4:修改7 B1 O! Z/ ` q- V% I. [2 x
, e$ t( f8 m. [( a- {- <?php5 x7 a2 K7 }! @4 W4 `2 v
( C; G9 h) W# k3 a- //链接mongodb
! `' i0 c7 r5 P7 n- u - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. v2 a) ` `/ N
, R0 G- c v' c c8 @+ Y8 Z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
4 ~; q- O8 [3 d) c+ z$ Q8 t8 M - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行0 m$ U3 s( `9 z6 D: \. o& ]5 ~# x" ^
- $bulk->update($ c7 Z3 ?: h* J2 Z
- ['user_id' => 2],
* _& P! e" Z" b3 A8 N - ['$set'=>['real_name'=>'中国国']
: X; Q+ J: s, i' _8 f; c - ]); ' P$ X6 s; L( X7 J6 n% I- x
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,8 o, |$ Q5 N+ c0 A- f1 A' ?
- //1:字段不存在会添加一个字段;
$ F$ y0 \' V/ h0 v* n$ m - //2:mongodb默认如果条件不成立,新增加数据,相当于insert& p3 a$ y& e. Y' J6 F
$ J: t' G. b9 r6 q: s" m9 _8 ?* \
8 @4 A9 L7 ~$ g! c5 y$ P3 B- //如果条件不存在不新增加,可以通过设置upsert' a; n4 Q+ `9 E, x$ S" @# {
- //db.collectionName.update(query, obj, upsert, multi);9 G, U( T1 k N9 t* j1 s: M
$ [5 y- {7 f& J* J# W- $bulk->update(
7 ]2 H2 s& W/ z5 W2 Y - ['user_id' => 5],
2 d6 K$ B4 r- E3 W7 Z7 c - [
; g0 k& Y# C' j3 b$ i7 u& h u9 \1 t7 x - '$set'=>['fff'=>'中国国']. |% |6 q8 Y2 `7 l) f8 i- I
- ],
- l0 q8 ~7 M9 b% V5 M f - ['multi' => true, 'upsert' => false]
" O0 M( `& ?9 Z8 Y) j. Z/ B - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
* Y% S/ f1 F& C* z! R! E - //upsert为 treu:表示不存在就新增
6 m3 M/ j- w6 p8 R4 H - );
* D( F4 G; C4 D! L7 _ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
& i1 k7 |2 x4 c7 c9 H7 u
! u' O4 Z: i. s, X2 [! E( kordered 设置* A) A, C5 ~4 c1 M: |
; O9 B6 D; z9 c- C; G
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 q+ J# x& k, i, b$ [2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行! M' f' U* f5 Z" ? K% C
6 a8 |; o# ~! X
5:删除0 B, X2 M6 Z& C( [
) _3 e; ~ L! @4 z
- <?php% H, u; m+ z' a9 h% t
- 3 m' T3 t+ M: k ~3 R0 c
- //链接mongodb
8 ]- ~: s7 U9 B; D, h; c - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 E2 F0 S( A. O8 B
1 c1 F/ Q3 Y- c2 W* r9 W1 c+ g8 z) a- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, B+ j" B3 w) W4 `& L8 Q/ A
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ ^$ a& _ Z! ]9 ^( ?: C
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段4 @6 J) `' n6 y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
: z5 b1 |+ }0 O - delete还可以通过limit设置不同删除方式# D. r- j# S# [8 X
9 C5 {' P9 m1 t+ u+ [5 @- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
" s. K; O) i5 S - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 + b3 D. k1 R) i& |2 H
' @: z& w8 }7 }5 E$ n6:捕获异常% _: x1 z0 [$ _/ b: ^
9 t. c; m$ ]0 Y- MongoDB\Driver\Exception\AuthenticationException$ p) H. D6 b' j
- MongoDB\Driver\Exception\BulkWriteException
- b1 I) ~6 t9 {7 S - MongoDB\Driver\Exception\ConnectionException2 Y$ [, ^3 h" t$ ]4 w
- MongoDB\Driver\Exception\ConnectionTimeoutException. \9 |9 ] S' k( w
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
+ ?# K3 k; I; o% Y - MongoDB\Driver\Exception\ExecutionTimeoutException
8 I4 S( ~0 w) ?6 ^9 g - MongoDB\Driver\Exception\InvalidArgumentException/ v j7 p* T3 E" R3 r4 t
- MongoDB\Driver\Exception\LogicException+ x: C" F! w: S( {, h
- MongoDB\Driver\Exception\RuntimeException( k1 L& s! \; F0 d3 _
- MongoDB\Driver\Exception\SSLConnectionException
* L' X9 ]4 b8 e$ A: u0 L - MongoDB\Driver\Exception\UnexpectedValueException& R. Z( w! \9 |2 }+ Z, O
- MongoDB\Driver\Exception\WriteException
复制代码 6 F: P& i) K& n
) B/ }' G7 _+ s# i& r1 B4 B& a- v3 L
点击查看全部
8 v- H- }6 {" S; p) P7 m8 @/ q: T# _9 U1 M! G/ O
5 e7 i$ F, P8 z2 z: K |
|