管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。1 f. E9 e9 e$ I1 P
7 m& R. b" V B: h& y/ D
下面用PHP7新的API总结一下:3 S- F. {$ ~! b, C" d, K
1 ]' s. @* b% H& k# d1 e; H一:CURD, b2 A# p' H7 h1 d j X+ m+ Z' w) v
% S6 L" \; e+ K6 M+ }+ j1:链接% N% x1 i7 Y8 P9 e& x+ Y
) Y$ u/ F2 c! e; m6 N8 Y7 K4 N. G- <?php
* d: O5 R$ R6 U& ]5 w5 U - //链接mongodb
" N: ^- [0 ?3 K2 _ - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');- n7 S) U/ v6 `8 G
- root 用户;123:密码;如果没有密码则不写
复制代码 & H4 K# U$ r3 U4 @ a
1 e7 e/ Y* @; ?* d
2:查询4 H9 d' Q; I% Q; U* D# f. d
( C6 n7 {" E! n0 B) l: F5 X
- <?php
. d) S# c# f( C) a
& H) s& H' w9 j) e1 K# c9 O, O" I- //链接mongodb
" r& x" a% V$ A5 n1 }8 R6 A - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 I' Y0 V- x! k+ |% f/ u7 a - , R! J) l3 m/ r& y' B
- //查询
- T1 S4 r3 l+ }! u' L1 } A' y - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于02 c S. u* Y! b
- $options = [
9 Y9 C& T( R p, F& R; }1 a - 'projection' => ['_id' => 0], //不输出_id字段
9 D& s( f! l4 I5 Q( W; z; h - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序! n8 t) H3 E I, Q
- ];
& C* u9 z( o+ ^2 n - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
}( ^* u; E+ V4 R- c9 P - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
" {, w' y; e" \* _' n% h! E. V7 b - $ c' x. H6 w( c1 N+ g
- / I1 U- k( A6 h$ A, w: m
- foreach ($list as $document) {' F7 I: O' C! p
- print_r($document);
5 E# y/ O# I2 |: A: D - }
复制代码
1 S1 b. J$ n# h7 L2 a1 m查询更多条件使用方法,参考第二节mongodb基本命令,查询
7 G1 c: }5 s! e* o/ E+ s1 [: x5 e# I/ E' }( S7 Y% c
3:添加
! T, N8 d6 ^3 G b' V8 a1 @3 P" O% i2 e4 _
- <?php
7 Z+ O. P9 y6 c( o0 v7 l6 ?
4 x/ G# H5 d+ f- //链接mongodb
+ a6 S0 Q) O# A {5 J# A - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ n9 t/ F5 M V
" Q6 s$ S" a7 a8 ^# R$ b0 T- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
: b3 Z7 N8 P8 t1 b; q - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% E% C6 S4 b4 d - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);5 s# O7 B3 j) k
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);8 j, D9 B: s# b
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 # L+ \/ q6 m0 H( s6 q
4:修改
1 e0 S; Q" d. L! O) u
" g1 L& W, Y7 Z) H. x- <?php6 F# h) S; ^8 F. D4 k' M
' ?+ d& _+ `7 i& o" d1 s: K- _, W* [- //链接mongodb' s+ e% q) w* j+ D$ M o' \" ?
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');- X: r' E# k4 b0 n ^' i9 S
- 5 y8 l7 |0 g: x8 o
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 J) m# J0 E8 d
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ w4 }7 Q3 K+ S0 Z8 |' F# o
- $bulk->update(' o. Z, `! l& [9 c5 m% [' C) j: x
- ['user_id' => 2],
5 q# I6 `$ ^) G - ['$set'=>['real_name'=>'中国国']
2 ?8 s" \3 D' C# V- ]; F - ]);
! F$ f) _. s' H" l" _6 @ - //$set相当于mysql的 set,这里和mysql有两个不同的地方,1 [# a0 { V9 O
- //1:字段不存在会添加一个字段;
# F s" ~% G2 K5 Z) `+ n4 U+ V' @0 P; q - //2:mongodb默认如果条件不成立,新增加数据,相当于insert; S6 A% R% u5 L+ x
- 5 _ A4 F G) Y+ F4 z$ d# h: I, v3 f
- ) D t! W- N, N
- //如果条件不存在不新增加,可以通过设置upsert3 K8 D0 j7 B' M+ o! Z; |, a7 h/ N, _
- //db.collectionName.update(query, obj, upsert, multi);
! K7 _2 _8 F: b8 W3 x. v- ^
7 _) g- f0 ^1 D8 a/ k- $bulk->update(
6 o" G% z* c! [; ~4 q/ r7 ^( I - ['user_id' => 5],! V- o5 s5 Z" n! Z/ l8 R( T* @
- [
+ N$ a7 {8 H5 d* i4 w; |9 o; s2 E - '$set'=>['fff'=>'中国国']
" ]# M1 |4 L- N* ^ - ],9 u# x& s5 }/ F* a: F) U
- ['multi' => true, 'upsert' => false]
3 d- b# |' g8 `1 | - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
* _7 Q8 {' g3 p. V( n' X; {6 r - //upsert为 treu:表示不存在就新增' T& G. f9 O& u- Z2 [1 g3 q/ p
- );# e, r6 `2 H/ ~% F" r
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 5 f# @3 {% F" I P0 @
0 q# r. L2 N; X; |$ }ordered 设置3 w2 J c( K1 A
" V0 N* V* b+ t- [# O& K& i! W
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
& j( E% b1 L) E' S9 v$ ]: L2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行/ \) |8 A2 C$ e( A0 w+ q
9 H1 n4 H/ p5 G8 h% n+ l: j( J
5:删除
0 s1 o+ }' h* }9 b+ r7 |: c# ^. v; @' R+ H7 }
- <?php- g2 k/ K, w4 b# Q- Q2 m
$ }7 x; d/ G% [1 d) f$ S! U4 g- //链接mongodb
: h" f. |: {, e0 [+ F - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' Y6 N. a) ~( x. ?5 s - ; s- {; f5 Z: R# W5 o; t) o
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
9 P! i% @$ M4 z- E3 N2 x# @ @ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
l# N8 U3 Z# q' A - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
! n l4 ~# ]1 ~. B1 J' v U5 ~ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
1 T) o! _6 f2 O5 T5 v - delete还可以通过limit设置不同删除方式9 [5 q' }# K+ @6 [" y
& T$ Q0 S; N, o- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据) g7 Q: |7 u! `4 n2 H( ^* d% F
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ a3 W$ V: C0 h- V. g% t! }! `: K8 t) F V
6:捕获异常8 Y8 X1 R" m$ d1 j
, r% [2 v( [1 p4 U; W# g# r, N
- MongoDB\Driver\Exception\AuthenticationException
2 V! M1 N. ?6 h - MongoDB\Driver\Exception\BulkWriteException! `. B* Q" `; m+ n
- MongoDB\Driver\Exception\ConnectionException6 [8 v* a/ A. ~7 J# A; }
- MongoDB\Driver\Exception\ConnectionTimeoutException
8 V4 x. Z3 j) ]1 V9 I6 s - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
: r& N/ `% O6 H7 r6 W& ?% N - MongoDB\Driver\Exception\ExecutionTimeoutException
' T( V# F* U3 ~4 c- i' _# [ - MongoDB\Driver\Exception\InvalidArgumentException4 b1 T4 }6 a. n
- MongoDB\Driver\Exception\LogicException
1 q' B7 p6 t6 v8 G - MongoDB\Driver\Exception\RuntimeException
1 W6 A+ t" D i4 D6 E I - MongoDB\Driver\Exception\SSLConnectionException, _5 C6 I6 E( a# X- K2 G
- MongoDB\Driver\Exception\UnexpectedValueException
9 ]3 a2 U) Z* f3 A$ ] - MongoDB\Driver\Exception\WriteException
复制代码
; U7 v+ F# R* g% d; s h e2 U* K( n& x Q
6 X4 C( f' _! y, p& D9 n
点击查看全部
( Z5 G5 ?$ D# m( O/ j3 \$ ~3 i2 Q+ m' r. t) @6 C% H1 P0 E* s. n, b
; l- c2 f$ y' Z; t- r! J- {
|
|