管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。8 e9 ?; w: |1 w8 B D% b. P" v- R
# j. d3 d& t" w+ M下面用PHP7新的API总结一下:. ~9 T( b/ L/ P6 f3 b
) \* b9 W; I6 V. P一:CURD3 ` s- E% `0 }3 e8 N# q
" X9 b. u3 _- @" F" C$ |& p1:链接5 @+ e- K4 F7 D
; \7 f% M/ Q6 F
- <?php0 t& M5 x8 |- w4 e8 o5 j
- //链接mongodb, u9 D; M& w" {% F# g3 [% e8 {: P
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
, b! @! V+ W& X0 k1 I - root 用户;123:密码;如果没有密码则不写
复制代码 ' u. d! L5 k* E2 _0 ^7 x: l, i
# S! u8 r4 s& n Y( V& `% `( W
2:查询) X1 T$ I* t, V9 m. l9 \
. D% C- \7 F! z9 {9 b/ [" ?
- <?php
% `& [% v+ v, b1 W4 E
) U6 z8 U1 k% r. m' n/ T0 r- //链接mongodb
5 q) D. W9 h5 @* c6 h3 K - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, M. ]" U& z- [- n: ~3 s# |
# m6 Z- u4 p, ]; B3 C4 m6 e- //查询
4 i( l9 ]1 F1 D% g* ^ |( D* F - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0+ ]+ d) N2 K. f7 L: V
- $options = [
: y( m/ ~- M6 M - 'projection' => ['_id' => 0], //不输出_id字段( D n- [7 k( c$ c
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序& ^5 v1 {& J! j* I" C, E% n
- ];
* k& ~7 _8 i3 J) ]; x6 e8 p - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
6 K* _2 j: Z. V! h) Y. K: d - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合( L9 j! S# z: Y( T2 T" }
8 C: A! h' G6 Z8 N5 q H2 u- 2 }. I0 l. X5 G2 r% ?7 Q
- foreach ($list as $document) {
1 @4 h: {6 \ _: ~/ M, f - print_r($document); 4 R* _2 B3 R m% y2 m
- }
复制代码 ) }6 @+ @- A3 h a
查询更多条件使用方法,参考第二节mongodb基本命令,查询
( z h2 ]! ~, W$ U! N5 x( q: |7 f0 Q( J5 N# a K4 @
3:添加
2 n9 z7 n- x) N: M8 r, c& `$ q- U: u; W7 e
- <?php
! w) [" o* b' R. Z0 z. F - 4 B) i( [8 a9 i' m
- //链接mongodb
L% y2 t. C7 d& N" \# b6 c - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 ~( @. |. b$ T- R7 y" g0 @1 d
0 _0 Y! n0 U4 f- W8 j- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& v$ u5 M4 R7 [4 L6 S! |
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 Q$ y {6 E9 M4 a2 f# `
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);7 K& y# R' `. l6 C
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
?5 S2 p( s I9 B! u3 ` - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
( D- l' e) F7 `4:修改4 \" u+ e( J: \6 R, K' r
% z3 H' i3 q1 p* _
- <?php" s1 ]5 J# j$ X3 H
]! Z, R' d8 R* Q0 I) C4 J2 L9 Q- //链接mongodb
1 w/ r* }: \/ b n) K - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% l( {3 z4 @7 i& M. k
- - r& a5 y& J P; L
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
" V& ?9 ^8 q- k& z N" Z - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 b; T* q# j$ Z
- $bulk->update(4 ^# K/ F) `+ f: t
- ['user_id' => 2],
1 n2 u* D! S. V3 w0 f; { g# ` - ['$set'=>['real_name'=>'中国国']
0 @, h% h0 L; [ - ]);
8 w0 f( b z# H. I5 C - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
3 J* G+ L* w0 C- h. D5 x: ~ - //1:字段不存在会添加一个字段;! z0 ^, y2 J# k/ H2 O4 c
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert, I6 ?& Z, a! W) M3 M. j
- ! d" C" }9 t1 M J8 {% ~* T
- 6 |) j, G$ u% u4 C
- //如果条件不存在不新增加,可以通过设置upsert
% V0 R! w! Z, q9 V8 a - //db.collectionName.update(query, obj, upsert, multi);
& L" g$ b: o9 D, k" L
. {; T! E% h" I- $bulk->update(. f8 v% v& e! x
- ['user_id' => 5]," ~* c! ~4 T f7 A. [* }- f
- [
5 y7 Z3 m4 I" l" J) @( f( w - '$set'=>['fff'=>'中国国']
0 ~1 |% c/ K5 |! ?9 M0 ]. @9 P, W - ],4 t8 C/ {6 Q4 s6 S0 Y) F
- ['multi' => true, 'upsert' => false]
8 u5 `0 P* H: s& [, I: [$ y* F% z. Y - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条' K2 k4 H: t5 O/ O8 W+ _5 f. N+ u
- //upsert为 treu:表示不存在就新增
6 T- V" c) G. A$ i( \0 [; b3 n3 o$ [ - );/ o; s5 v+ J# N. c0 }$ {5 ~
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 . N; |2 T( ], }8 D! l! S* F. G
* v$ R% q3 c; D3 dordered 设置
# w4 Z9 m; W/ E9 n7 T4 M3 y, k \; g; c
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。! M2 ~6 q/ J* }- w2 U2 j6 n! P
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
3 P2 U/ |+ g/ m |8 u1 U3 J9 |1 Z M' w
5:删除
- `$ W q7 @! M
2 ?1 ]) N; t% E3 u: b- <?php0 Y* W; N9 C* a3 z, ^! A
- $ Q2 l7 `6 N: B* r+ \% R) F
- //链接mongodb- a; }; S# V, ~/ n$ J2 i) r
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 e- }/ E, U$ N% o! V( b8 I
, K) e y: X, c S3 _- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
, h/ U: o8 W6 ~3 H- S0 r - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
7 _, L8 y& m# o, T' R0 h$ G0 c - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
& P# x3 L& |( g- p# U" n ? - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合$ e" j# c: [+ B
- delete还可以通过limit设置不同删除方式
7 {$ u) X3 m( y( c6 h
* \, H4 X' g" T3 x% }; Y7 [3 o- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据! B4 i' e8 O# a! H. D3 E- [; i
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 2 m/ T+ S% s' w/ N
' u D+ g! P4 w8 L; O1 y& F6:捕获异常/ H% ~6 f% M% h% L3 }
. c8 C5 E- T& t* P3 v- MongoDB\Driver\Exception\AuthenticationException" @% I+ `! K N J( [
- MongoDB\Driver\Exception\BulkWriteException- z; @2 p$ h' o
- MongoDB\Driver\Exception\ConnectionException
. m6 J5 r8 r. L* x+ S) a% n K1 @9 n - MongoDB\Driver\Exception\ConnectionTimeoutException
, V, d& {3 U. _2 l - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口0 q0 Q# m( S. Y L3 C( v8 W1 M/ }
- MongoDB\Driver\Exception\ExecutionTimeoutException
5 D! q; p5 {7 l; \ - MongoDB\Driver\Exception\InvalidArgumentException
+ v% m$ v( b- R# B( b - MongoDB\Driver\Exception\LogicException* z$ ?6 }0 \/ W# A6 [7 i: l; _
- MongoDB\Driver\Exception\RuntimeException$ q1 o! ? y% g3 j# [
- MongoDB\Driver\Exception\SSLConnectionException$ z) R3 a0 s& |9 h+ G+ z r3 d
- MongoDB\Driver\Exception\UnexpectedValueException
" ?: P- l. ]: T% {7 r" O - MongoDB\Driver\Exception\WriteException
复制代码 4 L. g8 {, z4 a" i+ i+ k! }# J8 T
# J! ~; Y- C9 p8 S- Z5 R
4 |1 e) v k0 Z1 u点击查看全部
- Z- O1 p" v" }7 N* m0 R* b% s# |1 o( B) Y
: o9 Y5 J" k# [8 q" ?# @2 {$ K |
|