管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
$ |6 p5 f# S/ v* L0 S' e1 Y: J3 o! ?% d+ s! ]
下面用PHP7新的API总结一下:/ ~$ R- x5 m: f
; ~. Z7 r6 j8 ]0 r
一:CURD4 t6 Z! f( e( ~ \7 A" Z
0 P, ]$ Q0 t& y A, G# H$ F6 E- G! s' c
1:链接5 b: |( \# k% `4 Z _+ S: q
& v/ {$ B' E2 ~' B" t
- <?php$ b n- |1 j9 \- `, f* S) a0 X# R
- //链接mongodb- ]$ z3 U& G$ _
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
' k. W0 ?" O8 F8 p8 C% i! \2 q - root 用户;123:密码;如果没有密码则不写
复制代码 - S+ Y- \ C; L; c/ I- H- I
! c6 @- Z! P! T; ~$ ~) @4 _2:查询- {9 h9 M( O( v0 g: N- g
) a3 n7 {$ t5 N# b! y8 y
- <?php
$ J5 h7 _/ Z9 u9 N. `; l2 Y5 Z" H! ?
4 A5 R" Y2 A( l) V- i; s+ _- //链接mongodb
4 Q) e. ~, G5 e7 `: t* x2 r2 [ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 I1 t$ A- t* w: G4 \
8 W w& i0 O# r4 [* ]5 g: H- v- //查询
# V. ~( {( k5 y3 g9 J5 ^0 G' S [ - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
9 E0 w! w7 Y6 [8 P* {+ N - $options = [
d. l( Z. K& W6 i# w$ {$ E - 'projection' => ['_id' => 0], //不输出_id字段' A# O" F" z) l( `* Z9 K: x
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序0 [0 x( L* Q1 q2 t* G# O! J
- ];
1 G; O8 a( L5 q% Q6 w0 @ - $query = new MongoDB\Driver\Query($filter, $options); //查询请求1 n4 S$ q, l: k! h0 d
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
# w6 L) ]; {# B. z( ~; p - * d: M. f, S/ u+ y7 B
- $ r" C+ g6 @2 p0 ?' U @
- foreach ($list as $document) {
% ^* n9 v" U% v - print_r($document); 2 N2 {* | C/ y- u/ z' r' `
- }
复制代码 5 \6 I7 P8 k: t7 B' R; g- X6 B
查询更多条件使用方法,参考第二节mongodb基本命令,查询0 I& a9 c8 {' J* S0 q
) f$ }8 w/ A3 K- i0 R
3:添加
& q; v% B G# W
% y9 k; p3 m3 q6 h: \1 C4 b' M$ e- <?php
4 `% l* L6 n& z
, p/ X3 J) R5 b( `' S. v( A L- //链接mongodb
2 ]- D! ^5 @+ s - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% A4 t7 [* |) C1 \5 _+ j1 c; _
- y6 f- W! o6 q( s- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- i" c8 V. o) e8 S n& R- Y' o
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% O. e- S3 U9 V7 }3 w+ f5 @; B - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);* u) T8 H4 X; c3 s/ j# A$ ~
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);4 B6 _5 Z6 A% m4 a) x
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 . ]- ?2 D5 A6 h
4:修改
0 j, n3 x' h# D+ ]. j
3 E" A4 h5 p( I7 B9 _- <?php U" t# U* M" k# I; m
- + J& o# U8 c" M$ }- ^" e% z
- //链接mongodb0 M. T' Z* x4 U. t5 \" \
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% m+ _# S- E7 C+ L
- $ t. ?5 S' s. O- A
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 B2 n" |0 v- S/ A# b
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ ^1 e" j- C, w4 l9 z. O! b3 R* j3 x - $bulk->update(# o$ y$ }: K% m; C# n: b
- ['user_id' => 2],
+ Y9 K# Q- `- z: D; Q - ['$set'=>['real_name'=>'中国国']2 V* Z( k+ o3 t( I& f) ]
- ]);
8 |. P6 c; N X; P: _8 R4 C y. o - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
( ~8 e! ]4 v* C* c- m - //1:字段不存在会添加一个字段;: x, {8 E2 x/ m/ k& ^
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert; i$ E( V9 B$ o+ k: V
- 9 y2 N5 y8 e- B" z
- 1 q* y% e( s5 r; q
- //如果条件不存在不新增加,可以通过设置upsert
' k k1 q: I3 k# J - //db.collectionName.update(query, obj, upsert, multi);; F' k# v% b/ Y
- " F( r* f" P0 I
- $bulk->update(2 H9 ^( v1 K1 S3 w
- ['user_id' => 5],. T$ y X: W; K
- [, q9 @: {# u! Z% V
- '$set'=>['fff'=>'中国国']
- n* h2 {' Z( v+ P - ],
I; D( \6 @4 q3 C7 w - ['multi' => true, 'upsert' => false] ) L8 N) B$ _/ _* {# {
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条4 `/ ~* v* g: B( }) a
- //upsert为 treu:表示不存在就新增# a! s6 i" ?& T. n8 z
- );$ ?. s" b8 v3 q/ @/ {
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 4 K/ ^* _: d( r, ]6 p& J
5 L+ y' S3 P" Z: W8 Z- C# \ordered 设置
5 w6 T5 U) v! I: H; [, s* a, b1 w: V7 u. E6 z& @
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
$ a! }+ |4 [4 d3 z1 S3 I( ?2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
# h4 c$ K! w6 X2 S; [; [9 t# W5 F2 {# m* i
5:删除
: X$ s3 z# C+ l7 ?$ M7 z; H- P9 A; d. y/ ]
- <?php
4 x. [1 ? J0 n5 ~5 @( i: K - , O% H7 t9 j& c, C0 y
- //链接mongodb( L. M+ o9 A5 s$ }
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 q1 n+ S y) J
- 2 N8 m- G- u$ z
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
H' B- A! r6 g! w& D - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 ^4 V) K- B! c% S - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
9 n/ q2 t! E. p4 h- x2 V) h - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
9 M' k$ ^/ T* M - delete还可以通过limit设置不同删除方式
9 @: {) g! h# t6 P' ~& h2 ]
$ _& G* W1 m/ ~- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
- g k8 A- K3 m' W2 g- ^ - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
- A$ J1 b( M+ a. p0 [" j n6 V6 l$ Y( d. _) U
6:捕获异常
+ g% i- v/ ]! u8 \/ w6 P' x- j# \" a* {. V, P V1 v. a8 G- }
- MongoDB\Driver\Exception\AuthenticationException
. H# u9 D6 P; c! J9 W# C - MongoDB\Driver\Exception\BulkWriteException/ |) c8 r/ G" R
- MongoDB\Driver\Exception\ConnectionException
+ \" M- v* H3 T* Q( C - MongoDB\Driver\Exception\ConnectionTimeoutException
! r& r. ~. z+ w& f - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口! _6 y4 o3 Q" _! j
- MongoDB\Driver\Exception\ExecutionTimeoutException4 Q0 s ] U: p) @
- MongoDB\Driver\Exception\InvalidArgumentException
6 G! X7 _( k! v: U) L5 E - MongoDB\Driver\Exception\LogicException, J* Z) K; P: B1 d% J2 D
- MongoDB\Driver\Exception\RuntimeException1 G6 q$ a6 n; _6 K5 C
- MongoDB\Driver\Exception\SSLConnectionException
$ D6 q& w1 `% f. G - MongoDB\Driver\Exception\UnexpectedValueException1 `( d3 E" V" v' \) ?* U
- MongoDB\Driver\Exception\WriteException
复制代码 $ h% R( J; u* k6 F& h
2 D9 y7 ?, L# N* }9 u
! L/ t! @5 J0 _1 R9 m
点击查看全部. K" H3 g! `/ g8 T. e, h
& ?* C+ L5 K; e* p) \* u
0 k' S5 h0 v' d( `# d
|
|