管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。* Z- y6 v% H M/ w: A
1 ?* W; p3 \. l1 H9 i( y- @. x6 j
下面用PHP7新的API总结一下:
5 Q6 Y9 y5 {1 Z$ z6 p& e/ N4 O4 ~2 i6 @) _7 L9 M
一:CURD$ Y) @ }' P+ J! f
% y, A a) x( E( }1 M* J1:链接
5 J7 @5 Z$ P3 r
7 @0 ]' Y8 e1 U8 \0 Z- <?php
7 B, n G4 K4 Y) x* L/ F- | - //链接mongodb/ @- V% y- v' ]/ u' [) S' v
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');: ]0 W1 E$ q$ Z# I1 G2 G
- root 用户;123:密码;如果没有密码则不写
复制代码 9 d9 T0 Q8 m, r0 f$ s# X% D( n( c J9 U
$ ]+ _$ O' K$ k _! ?" \0 u
2:查询' D. r0 ^' p+ |
I, W* D) _5 N, o
- <?php6 {* @' e6 E' q
- ! v7 c1 p; ^/ {5 ]# e
- //链接mongodb E7 V7 _2 j. w3 n8 [
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
V8 g( T5 ^0 T# O3 y# t% D
- H9 B4 j' C3 ]2 {1 }* Z. x; R- //查询
9 l) f( K# [0 ^, K - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 D: r, M9 \) ^5 ?. F3 n
- $options = [
5 X+ x8 ~9 U2 O& W. h# V. Y - 'projection' => ['_id' => 0], //不输出_id字段
! f0 z! P/ U! }, f- P - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序/ m" S; [& V- T3 ?6 |/ d4 I; O
- ];
; H6 G; W/ o. M; o# E3 G$ w3 E - $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 \) j! v0 Z2 f
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合- j f" u+ l$ p5 W) T# m
, x" P& @+ W& y0 J
, y1 p5 t; {* J/ a- foreach ($list as $document) {! j' o# Y& s/ c! A, M- O
- print_r($document);
8 P$ O5 f+ [ ]: M% H% J2 \ - }
复制代码 * x% @( x/ T3 I8 \" n2 s
查询更多条件使用方法,参考第二节mongodb基本命令,查询
, V) ^2 M, x4 u3 G9 ^) K; L F- N
, h9 _. S% D( h! y# t3:添加4 ^7 V$ ]& Q2 n2 P D. `
; y2 g p7 m/ x4 w$ C& b2 L/ ~$ \/ H
- <?php* R6 \1 ~5 v5 \* H
% y* D) ~* f; E2 T8 D ~1 k5 F- //链接mongodb
7 b' | [5 G) T6 p$ p" B1 ~) m6 q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
* i* Z- n* @$ M) e9 q( w
- S. X1 t, ~8 n; A3 R& d8 C9 T+ {- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ D- C2 f9 Y* L* w9 n- A" i. `
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
: C) c9 `0 W- R ~& Y) V7 s5 @ - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);: }' d' z1 }" U6 i, r% `
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
F8 [- F9 S' d - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: I6 t' l+ C# C0 I: I) Y4:修改
7 P1 X3 R8 P+ x8 [5 K( n2 S$ G2 k5 T9 |3 v+ m5 l7 u
- <?php
9 r+ @# k- o& }, I L" ? - . c% ?8 K$ v6 s0 H
- //链接mongodb
' c4 X/ ^% w2 ` - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 i2 B9 N9 u% s( B3 M - 3 D# |# j7 A" ?+ r- D$ b# V
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行0 n# c; a. W1 [- A7 j* }+ c7 w
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* R. b- N; a" S9 ^2 G
- $bulk->update(9 d1 h" s" A3 N' c- `
- ['user_id' => 2],
! d, c1 p. S. `0 I# k" V - ['$set'=>['real_name'=>'中国国']' h4 f0 q' @! T5 t/ c- `, S! q
- ]);
1 F3 _' n( A& ^- A - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
: X* \* {: ]3 [& N A ~3 c - //1:字段不存在会添加一个字段;
. ^: P" c# X0 T - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
: b; S7 n( t% N
' _5 ^ M5 E! ~- 0 b5 Q) p. e8 [: q
- //如果条件不存在不新增加,可以通过设置upsert
. `5 j4 t5 k4 p$ f" d" L - //db.collectionName.update(query, obj, upsert, multi);; D4 r) C& e# k5 R
- 0 ?8 U \; q2 N' z
- $bulk->update(0 m& V: L( u' H e1 {' C
- ['user_id' => 5],0 ]+ R" T% S! s, w+ {+ U. z) x- G
- [
" y* P6 ]( S% v- E2 v1 p" ]+ t - '$set'=>['fff'=>'中国国']
9 [6 s; {& z, d" R - ],
$ H. f: d0 E' ]9 c$ \2 I. u - ['multi' => true, 'upsert' => false] * H$ U7 _, C6 b+ }
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条+ u( J; t6 |/ i
- //upsert为 treu:表示不存在就新增
6 |8 K0 a) ?2 R. T5 C, `# j7 X - );
- m' ?/ c3 H: O8 |3 h/ H - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
) y0 m+ B5 C9 z4 h" g2 P2 a7 F9 i- n6 C9 J! w0 x+ r
ordered 设置
3 `5 S9 k' C" z* F4 p4 p# r
" F5 d, y6 O/ b* N3 _1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
- w2 \6 Q3 G2 e R; o2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 \5 ?/ [! q- m9 R2 T
+ ?' J( ^( D8 d$ J r$ {3 y
5:删除
# S& S2 \8 G# H' r+ q0 G( x/ J$ c4 B$ n6 h' N
- <?php( x7 T# K' J/ S" w
1 w8 D5 c6 k) V- S, B- //链接mongodb
A$ E& ?" w0 }: U7 c* H - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. r# ?9 m9 F# {, ?& ^4 |* T
) u5 `' b4 a2 U1 a- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
# T, N8 C0 d2 a5 ?; K9 ?8 m - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
: B# w+ B9 B( y5 U - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
/ C- O/ s) |* k% Q+ ?. H* f - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合$ X" y# v2 U' _
- delete还可以通过limit设置不同删除方式! u& E$ T1 E' Z z) q& ~3 J
- + ?4 b8 i2 D# s6 G0 U
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据# x7 k+ ^& n# _1 U! k* P6 F% V
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 + s3 G, W n" K4 |% R, ]2 F
1 K6 x% d; _) _# i! F7 K6:捕获异常0 ?4 d. s+ U' i( C
0 M+ r; g7 v3 t0 ~9 ^- MongoDB\Driver\Exception\AuthenticationException- b1 t' U3 p+ O
- MongoDB\Driver\Exception\BulkWriteException0 s7 z; U' V$ K. b) F
- MongoDB\Driver\Exception\ConnectionException+ W- q( y) l' y5 ?* S8 i
- MongoDB\Driver\Exception\ConnectionTimeoutException
1 g, a2 Q7 z' O9 S* N; S7 s - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
# O' g& H8 g" Q3 l% n0 p# C- T/ o - MongoDB\Driver\Exception\ExecutionTimeoutException
, A9 U/ A# @6 ?" u: T - MongoDB\Driver\Exception\InvalidArgumentException
- [0 j- w" U) V6 i- L9 c - MongoDB\Driver\Exception\LogicException
5 J P5 o( g& Q* a) O) u - MongoDB\Driver\Exception\RuntimeException
* _) n1 A ?' U; k* r - MongoDB\Driver\Exception\SSLConnectionException
3 L( s9 O2 a$ }1 p; V - MongoDB\Driver\Exception\UnexpectedValueException p) |' \, q' b8 K
- MongoDB\Driver\Exception\WriteException
复制代码 4 |$ ]3 z1 w2 d- Y1 t, l
/ E: V% [- v& n$ A3 h$ O( K. x4 w( C- e7 K( J- V! v
点击查看全部
% |4 I S9 M3 `7 @& N. g% w7 ~1 ^ V" S
7 U9 Q9 D, O E2 K* l w
|
|