管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。# U O, H- q" J# _
( X' T3 q! G# j! |下面用PHP7新的API总结一下:
+ b$ ~# I/ b! Q1 b/ n6 |% l
. j" I, y0 o8 _6 d4 M2 X一:CURD
9 k" F4 h; O2 Y Z7 @' b2 b) r
% F; y0 N0 @2 _2 u# |( g' l+ `1:链接( ]. ^# L% w/ x' _; }
3 ^# C h; A6 x4 g- <?php
# ?( Z3 K S8 B& {/ W6 f - //链接mongodb
/ L! f6 F$ y) K - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');4 J& d$ s$ `% S* k ]$ s
- root 用户;123:密码;如果没有密码则不写
复制代码
: A; G! o7 w8 J* w1 w* q4 ?1 U
, U" H1 ^: x3 F* h8 u/ l/ E2:查询
6 A$ L# W0 t3 [2 \7 L4 C" ]- h8 ?' ]3 O- `. p( h
- <?php9 q8 |4 d* |1 ?5 D( |$ V
" l3 R# X7 s* }! s2 w* b- //链接mongodb
C# x% F, N# o! z - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
2 J8 P" ]- I1 k2 `. X K4 i9 h+ C; s - T+ B: r; ^2 |9 w6 H1 j# E# I
- //查询
' N, m( Y! K; G7 ?4 A/ s% z8 r - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ r* S! V& D( ^ [* [3 n- `7 A
- $options = [
9 Z: F$ a+ J6 v) @8 ? - 'projection' => ['_id' => 0], //不输出_id字段
0 M, Z) K+ x$ k! D - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) W% N$ U" Q3 b3 o
- ];
: r) j: Z% ]) _, D" e0 R0 `5 m# i - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
- ~+ w+ f% Y' }' L& W$ A - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合5 m: O- \. J3 R/ Y
M' P$ \* b. P2 N6 P5 L
& o7 S. L7 @. D5 W0 V6 F- foreach ($list as $document) {0 a0 w& Z" m7 G3 G: V
- print_r($document);
$ A8 c3 x4 d, c" t" f- x - }
复制代码
" D2 u- ^8 v6 z% Z6 H% h" W查询更多条件使用方法,参考第二节mongodb基本命令,查询/ q% i X+ a9 A) S- y/ M0 `
: w6 [! _3 W. j5 m
3:添加
$ W2 @2 t( J" K0 z) R( s9 ^" ^5 A, k; F& g) p/ F
- <?php j1 S) f! q5 i) D/ S% x
- , }0 Z: b. z6 m
- //链接mongodb9 u- B/ G, }5 x. s1 E; z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
+ \+ h0 T2 [, J6 t; R5 P: A - % {5 ? ~8 Z% | `
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
' [: Y' D. m' @9 D% ]& _ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- ]2 }2 X+ q$ |* |% K3 e
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);7 R2 A9 w. ~! F7 ~. ?1 [
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
" z- L9 S- j0 w) X - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 * I9 F6 z6 \' ^' [: k) A
4:修改
b2 q. K% u3 q; O" D, p0 o8 n
! k- b( A3 ^5 x9 I/ ?5 D& |6 e- <?php
, V ]+ L8 |/ g - . m& v& ]8 Y7 a4 B# I
- //链接mongodb C; F. R5 Q6 a
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 y/ c: K4 F2 o8 J2 l' h1 h
( A6 C, V O! H$ X9 E+ E- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- q7 H5 h0 S4 Y) q
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
[+ t( d) p4 t ]) ]3 ]& K: v4 [ - $bulk->update(
& C, `5 S- D* O2 F8 R. R7 a1 F - ['user_id' => 2],
. P; S2 |! S: k1 n7 Q/ k - ['$set'=>['real_name'=>'中国国']/ U; P; g0 ~( b8 s1 j% B6 h
- ]); 1 A% k+ f0 F# ^
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
% g1 V8 N$ Y% M a1 S/ \ - //1:字段不存在会添加一个字段;! |5 d2 K+ p- g. k# @- w: h
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
+ C( _, t3 O$ [- z; y( z9 B - " s1 A1 _$ q7 ~9 }. V5 C
, k8 a# {1 g( x# G* T5 z- //如果条件不存在不新增加,可以通过设置upsert! t; |3 _" O. u# A9 m7 S# u
- //db.collectionName.update(query, obj, upsert, multi);# h" T: {' j/ ?& a: Q* P- `* W: V
- 9 ^3 E/ c$ d+ r0 t0 S& T
- $bulk->update(4 _" w" F# n8 M0 D* C
- ['user_id' => 5],
* m; D$ f6 }4 ?2 C/ @- Q6 R - [
$ u# G `" E6 U) | - '$set'=>['fff'=>'中国国']
" m' u2 ?3 f) c; M! t4 W - ],
0 T, q: P4 A& p; \( n+ M5 m/ X - ['multi' => true, 'upsert' => false]
7 ?9 A2 g" @* V, S- D - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
7 i& h `# G# Z# }+ R4 V: @ - //upsert为 treu:表示不存在就新增
) C5 V, c/ R+ w5 O8 I - );0 @6 D- y- `1 D4 Y6 s4 y6 @
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. w- y- C: V1 f! N6 p0 |; i
! B4 n' G/ C0 X/ x8 a# Y gordered 设置0 a/ u0 |% w6 q. n( A
- Y; k6 a9 P* _' Q3 z2 j7 A8 |2 ~1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。$ J1 H' u! g3 w8 Z, }) ~; w
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行( a/ F' ~9 R/ \4 x/ y! d8 G1 o0 k0 [
& a/ M8 P% u6 o- u& a3 g
5:删除1 V3 h8 t- ?9 @/ u2 h
. i3 k+ w3 K8 W% P
- <?php
3 p& ~; i# x7 m1 ]. t! U; d. r) j - 9 m2 E4 a0 X) \4 O( E$ ^; {
- //链接mongodb# V! \! a. N* _5 ]/ }: e
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' ?2 X. E( A: b/ c, P
0 T( m+ C' r1 R0 f/ S- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
7 R! A% T& s% J+ K0 b2 v# A - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行" _# x) k0 }$ X1 a
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
0 N6 e0 B5 j: i4 U; K* P - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) C" x+ [* s" o2 J0 h/ E3 }+ G; O
- delete还可以通过limit设置不同删除方式
2 d4 S, b! w( ~/ u; |8 q/ f" X) E - ) _& G4 g1 \/ b2 a
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
' h* N) A* M! O - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
( W2 w; G* B* X' L: C [
7 ]7 O8 S( q! A, e4 A. i7 G6:捕获异常4 x$ V9 d: j- [" U* w
- D0 ~& _, C" C) I
- MongoDB\Driver\Exception\AuthenticationException
& G( K( `5 h/ }( F7 b3 K/ W - MongoDB\Driver\Exception\BulkWriteException4 d4 A& T1 {8 o
- MongoDB\Driver\Exception\ConnectionException/ G# x/ `9 w4 S
- MongoDB\Driver\Exception\ConnectionTimeoutException7 l' t: o+ [) V/ F5 I+ C& X9 r& B
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口$ h Z4 n' _; e+ b7 S W
- MongoDB\Driver\Exception\ExecutionTimeoutException8 }% s5 I- \+ N5 k) z& W; G- c3 D2 Z
- MongoDB\Driver\Exception\InvalidArgumentException
; t g0 @8 A" S+ z/ a" o; o: a: j - MongoDB\Driver\Exception\LogicException
+ i( E( N G+ n' N0 r4 n/ c3 P - MongoDB\Driver\Exception\RuntimeException
( A ~4 a5 y8 s - MongoDB\Driver\Exception\SSLConnectionException
/ V8 q( r$ [$ G \# K - MongoDB\Driver\Exception\UnexpectedValueException
0 y5 x a" @ R- { - MongoDB\Driver\Exception\WriteException
复制代码 . g D7 V$ i6 T/ w
0 L. T6 [/ p4 Q
& J$ O7 s" v- w+ I点击查看全部- U5 E5 v3 g! v: }1 P9 h1 f
2 } Q' Z2 ^2 P
# O# N# H2 T8 F
|
|