管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。3 g, y% l" }$ H$ ?' R: F, n
# h. |4 h6 H( v. O- r, `( t下面用PHP7新的API总结一下:
# x$ N; ~8 A- f( S- ^- [
" J5 o9 k- T5 e6 s一:CURD
, I# V2 |3 d* Y+ b8 n: q+ h0 V+ v& m' Q8 V
1:链接
5 @. b* d1 v6 a) B6 s' G% a: o' u3 t9 u0 A9 W) I+ x+ e
- <?php. K! B4 A' i3 F' m
- //链接mongodb
T, B( [% K" ?8 c, V2 y" u - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 o$ K& V2 }, ?0 n+ `
- root 用户;123:密码;如果没有密码则不写
复制代码
6 I9 q! k9 X% }+ t% }5 q) \
$ \( w2 G: C0 O% o2 }7 m2:查询
$ ]- ?. n3 M1 ~& f/ N9 _% O" \, r6 a& {7 L; {9 N
- <?php
" U1 @7 V) J7 l - & G) T, b) D2 i" D; Y( o+ M1 `2 O" |
- //链接mongodb
! _5 s9 `7 \% W& M2 K$ i0 H- j) ] - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ _8 |5 K/ w- y; \; k. j
% x, ~' f. ]$ m9 N3 d' r- //查询
, |. Q" f+ X6 p9 ?) a - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0- e0 F) }5 Q6 ~- J; J
- $options = [
9 C# R, W) n$ s! | - 'projection' => ['_id' => 0], //不输出_id字段 Y u- T p. g3 h. E; e
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
$ H% V( i! w1 U& | - ];
8 H$ J+ ^9 s, J5 Z7 _ - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
& t" d: l1 m6 p" g0 | - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
5 s6 K; J$ R& `3 \2 L& s - ) h9 g- l3 i" B1 b& r, E6 \, C5 a" B
8 t( u9 M0 v" F6 v0 m7 P- foreach ($list as $document) {* p+ w2 r8 X( E2 D
- print_r($document);
7 O: ^/ C/ ~" B/ i# C, M - }
复制代码
' z A$ ^6 X' d2 Q; A, l查询更多条件使用方法,参考第二节mongodb基本命令,查询! z) Y. c5 R( {* Q) w# B0 U
/ q/ s% ~. s1 E9 d
3:添加
/ L8 [; Y- s8 u9 A
/ z7 L3 Q3 }4 s2 c- <?php
2 @" v0 g' o! S+ i8 O- O
i2 `2 e' a, J- //链接mongodb
) x" n4 B* \) ^7 D& ` - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
( r7 c4 I ^0 ]; q
4 w6 J5 e3 i( x' f' D' n1 c- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
. k- H @1 A1 F& p5 a - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
7 {* g2 O& z9 b# o+ j2 m/ z( p9 G - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]); t. l1 l+ ?+ G1 x
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);4 }& V* b0 }8 Q+ P6 ?: f9 S( w, l
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 + q- H+ J- F+ i a! J; _
4:修改
" D/ {9 R; l" z% }; S' u+ B, |9 H
3 ?( T* F0 K9 c; Y- <?php
$ [% D2 L( D- q o( E: B8 J
0 L: ~) t( B4 @3 w- //链接mongodb
# r3 ~4 K6 b) d - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 n9 x' u! A. W% o" k
2 `' F! V6 \' d8 R4 T; D; a; B: B* y- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
& ? y" {1 ]8 O. R3 t/ f& v* @ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! L7 ^: P; S1 W% b8 P
- $bulk->update(! u/ T) l* I& R$ X1 r! j% i+ D" m
- ['user_id' => 2],8 L. r1 a* A8 d ?8 K+ c
- ['$set'=>['real_name'=>'中国国']
& q0 \$ H. ^) t1 Z# A# _4 t( R - ]);
6 n+ c; V5 K2 k* F* D: b - //$set相当于mysql的 set,这里和mysql有两个不同的地方," D) @; w( S- B. X. X
- //1:字段不存在会添加一个字段;8 d# y2 ]+ W& [: ?
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert. W. e+ D! D! i6 }: G! b3 u, u
/ B# R' T" n1 [6 d
. ]+ J+ `5 S3 G4 {( q- //如果条件不存在不新增加,可以通过设置upsert
+ P1 s$ Z& v: k4 J - //db.collectionName.update(query, obj, upsert, multi);2 i2 D6 [# ~3 j! |
- ! E, G4 j; ]+ Y, E! C
- $bulk->update(
+ Q, u0 a- ~! @" d( l5 l - ['user_id' => 5],; a4 x- z( M- V2 |3 T, r! I! b U
- [
6 x: ]0 U5 m8 g' P4 F' s( g$ B - '$set'=>['fff'=>'中国国']
: c6 t" a$ j' o6 k# H - ],3 W' s+ \) Y0 V8 r1 d# h
- ['multi' => true, 'upsert' => false]
& {* H9 W6 C- O7 S+ Q% }; F* Z7 g - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
5 ]& V5 h" [+ ?2 {8 c; _* O. y K - //upsert为 treu:表示不存在就新增
& I' k: m7 W$ o% a( j9 B& t - );# V: [8 B7 G3 J! v0 W8 f9 G
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 2 _& |5 p' Y4 o, S, u
7 f' I+ H$ T( ~0 ?, n; O( ~ordered 设置
$ ` ?" I0 g- z! u; u- G) D' Z* E7 p* a& X' b. l% W" t& {
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
0 t* b6 B h5 h; h7 [* k* k2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行+ O3 p, F+ J1 N/ X$ c; o. e$ C4 l
) @' I+ A8 Z- d N/ z% a
5:删除: V) R8 C. P+ O9 t/ K) y9 Y- W8 d% P
& V Z3 R. A& P6 T6 p- X; K- <?php
! ^- V7 H2 n- L/ B# R% t$ p$ m - ( t$ h# @# ^+ D
- //链接mongodb
& Q, Y# D* q. T- D7 ~- T& z - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 L+ y3 L N9 j
* i1 [6 m6 V6 P3 P5 I- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
& G7 e# G7 v: ^3 L- E - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
: E+ X! r5 w: R5 l - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段. k& {5 w# ^& v R
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合' N% s9 `9 E2 c+ z" k
- delete还可以通过limit设置不同删除方式
- z3 E4 L9 N6 ~ s. D3 Z, I - 0 Y# v7 l7 I C
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据+ i9 q8 k3 g" f' L2 n
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" @+ S$ h7 v7 L5 I$ p# G
( J8 [' Y& m' g9 r4 \1 I+ r6:捕获异常
; |/ r( ?7 w8 y" V3 |5 x- |2 _
& }# e% Q2 j! Z, N* }) K( n7 c6 U- MongoDB\Driver\Exception\AuthenticationException
7 @ ^8 }( F9 w5 e2 t - MongoDB\Driver\Exception\BulkWriteException
6 G: F' P: t Y |3 T) w3 F - MongoDB\Driver\Exception\ConnectionException
3 R: H8 b7 M8 S - MongoDB\Driver\Exception\ConnectionTimeoutException# u, K. ?. Q" t- S, U! }
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口 r& H8 ]1 Z( J" g3 v; {$ v% v
- MongoDB\Driver\Exception\ExecutionTimeoutException
" _; D9 t7 n! i1 j - MongoDB\Driver\Exception\InvalidArgumentException
# _" ]# F$ c1 K$ x6 F/ M - MongoDB\Driver\Exception\LogicException
9 x/ X; \2 W( y; L# |, W. ^3 D8 x - MongoDB\Driver\Exception\RuntimeException5 i6 E0 W6 X; P$ i$ U3 W
- MongoDB\Driver\Exception\SSLConnectionException) h, g9 B* s- H7 o
- MongoDB\Driver\Exception\UnexpectedValueException6 n2 M7 g3 P6 L) ^+ t# W
- MongoDB\Driver\Exception\WriteException
复制代码 9 T% N; h% s) ~8 o' B* e* E2 N- M
9 @0 {; Z6 ^7 M8 M0 b3 i, c" R( ?; x1 c& ]! r
点击查看全部
- f3 Y. ^) Z4 D$ p% h6 v9 l" N1 J' M2 W. b) I
/ M- w& ~$ J2 d7 q, c |
|