管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。5 ?0 W, h' G0 G! W0 G
3 [2 D: Q' A+ i. H; T下面用PHP7新的API总结一下:. i* v$ l1 ^; g: X. ~* Y3 ?+ A
- [$ m# [& _6 f* d1 Z, b) F9 t
一:CURD5 `6 l/ L( h+ y
2 n! ~& b3 M' e* R2 g" A7 F- D
1:链接
: P& ~7 z( |2 B8 L- h1 q/ ^, |$ \& `/ G- _0 `
- <?php
/ w" F* e3 e$ N4 M2 O - //链接mongodb
' L6 J$ c, d( s. o - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
. g s- d ~! q# Q7 K' ^0 ] - root 用户;123:密码;如果没有密码则不写
复制代码 2 g+ K1 Y5 X: i$ |+ C1 i
. G ]) w3 a& i! ^+ C6 c0 `2:查询
3 Y/ J5 B( y r9 |- L8 p G$ ]' m: d" O8 F8 A" M& j
- <?php
: C4 W, e$ U1 `6 ]& `0 R - " P( k( T5 h& |. c( E: v
- //链接mongodb
& j. z+ e& x1 z6 `/ n8 @ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ d& G5 A: E2 v& x: u& ?
* |2 Y, m0 }" b6 D* c- //查询
5 D' r/ h# z) @& a; t$ A' B" p - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 p+ U* [0 A: w, s8 ^
- $options = [% r) e X& S0 ^- R( e
- 'projection' => ['_id' => 0], //不输出_id字段
: J& R2 s Q6 |9 l - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序$ t( Q0 j! h$ M$ [( r# U) W3 r; c+ ]
- ];
7 o& B0 i& ~- B4 u5 l" E7 Z - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
0 r6 ^ y- Y; ~9 _$ M# E' o3 A - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合2 S h3 K0 A; w5 K- X/ C
4 _4 H# D- G* N% W1 G- 7 J0 Q: w& K, [+ e
- foreach ($list as $document) {* `8 J8 b# u; j1 S1 w
- print_r($document); 7 L. v0 u0 C: j* K5 J
- }
复制代码 : F, D. u5 W, q: h
查询更多条件使用方法,参考第二节mongodb基本命令,查询, Q0 G1 U! H' e6 t# A9 M
6 v3 _: j: p3 V5 K
3:添加
1 {9 T n7 O9 }0 \% r; s# T
; K$ L, Z+ N) P. I* L5 H- <?php
7 F6 v* k" @% K. S7 E# w- \ N- `/ [ - ; { a Z6 B* E( b) m$ ~6 o; H
- //链接mongodb, W) l% y- ^& @# j7 U1 m
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. ~: _3 f5 i% _" \$ l
- / M3 ^5 V8 a9 H/ u3 L
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( ], ~# x* g& `1 W9 F1 m7 U5 h
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
{5 B; n I/ r* U( E# d - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
: O( H) x5 ?- i8 k - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
! ~ g6 F! D6 I- c7 M3 ]) w - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- [. {: d9 m! Y# R4:修改: y/ h9 h8 Q8 ^
) P0 N4 b$ H- J+ x
- <?php
4 e* E) m2 G' c - * l% K% w n( |; K
- //链接mongodb
- E% s1 N* ~% ~1 _( L - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
: ?' _9 S9 p3 w7 ^ m( Q
) C2 h5 X8 H- M2 O; z; m- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
. @4 M2 r9 p: H6 t2 z K - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
# R/ k3 H( o$ W0 x6 x - $bulk->update(
1 v- k% T* W: H! [ - ['user_id' => 2],
2 h+ B* D- `$ P" ^. S2 i - ['$set'=>['real_name'=>'中国国']( o0 @- G# |' o/ D$ W
- ]); 6 B, C) R) ], u H* U9 N( t2 r
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
9 X5 `# @4 t: X ^1 v - //1:字段不存在会添加一个字段;9 u6 x% L& g1 s! r+ C
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
' h+ q4 A# S6 d: O1 S - 6 |! e' C: g/ _. X4 ?8 [
4 g T/ w2 B: S4 V- //如果条件不存在不新增加,可以通过设置upsert! x8 v2 N* J5 H- w% e+ b R4 }5 {
- //db.collectionName.update(query, obj, upsert, multi);( Q2 `: g8 W4 ^ R. z5 f/ n
: R7 l1 r! L& t( b9 s+ O- $bulk->update(2 W2 [0 N0 o3 F9 L
- ['user_id' => 5],
% [7 @1 Z# b$ I1 t: C- j u - [
$ T: ?) a2 p8 H1 u [ - '$set'=>['fff'=>'中国国']
1 t4 o6 g- D9 H v- U9 i0 G - ],3 t. Z9 L1 w* a; s7 l; a
- ['multi' => true, 'upsert' => false]
, R+ e" }: U& p" N$ c% } - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 u: y \% L7 k
- //upsert为 treu:表示不存在就新增4 _# S" c, S6 e7 o! @
- );2 Q" W: X6 n0 K$ `7 Q( m
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ E9 @! h% l9 @% i* X* U6 ?3 n6 {: ^$ b. g
ordered 设置2 I% V7 a. I& C- L. B
- t7 h$ C& y8 q" m4 S F) n0 B: e5 B1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。+ c9 K& a# t' I6 c0 L
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行& d" _1 G+ r0 E% z5 N
f+ d3 I8 y9 A6 `! @
5:删除
! A- r7 p, K* t" s8 ?. b- C
3 E; x5 V5 M* n7 E- <?php
9 Z u! |5 P( m L; [, F
( @. ^. w- a) r% ~6 d8 X/ G O- //链接mongodb: D- G& J$ |) b+ ] v7 ?
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# I# s& L" e7 t0 c, B" \# P
9 W6 \; B7 E. e8 t9 P- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( n8 w7 x- c/ \8 D: {6 y- A
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- h) ~( g+ r; S$ M+ P7 \; u X - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段0 M' s, J' s |" f) k
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合2 z4 M- t& @$ M8 i* @ h
- delete还可以通过limit设置不同删除方式
% ]& ^ J+ z4 B6 \- X9 A" S
% Q1 Z; J2 p6 f; Z7 v8 n" H: L- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
4 p4 y: |# l6 `" Q# ^9 b - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
4 r( m4 J7 Y, X' d1 c* L1 C. R4 n, m8 |& U
6:捕获异常
. v& [( o* T- C# A0 e* K, H, p8 l2 _- w9 Z3 L: v5 e
- MongoDB\Driver\Exception\AuthenticationException
/ w( A! G- x3 v - MongoDB\Driver\Exception\BulkWriteException9 H$ Q0 z/ @0 ?5 K( G0 _
- MongoDB\Driver\Exception\ConnectionException
7 c: Z- Z0 D W8 e$ I - MongoDB\Driver\Exception\ConnectionTimeoutException/ {& j8 d$ u f# h
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
3 T- t, k7 a2 v - MongoDB\Driver\Exception\ExecutionTimeoutException1 j/ F1 d4 `$ M/ ~) y' ]
- MongoDB\Driver\Exception\InvalidArgumentException5 R+ `7 s) I1 n& _, g
- MongoDB\Driver\Exception\LogicException
* s7 J1 P' A6 k( N) q - MongoDB\Driver\Exception\RuntimeException
& P6 u( x* |' \$ d; k8 D - MongoDB\Driver\Exception\SSLConnectionException
0 h% W/ s |8 g/ F6 E; B5 l: a - MongoDB\Driver\Exception\UnexpectedValueException, J* ]7 r5 d" i5 d" {) G" g
- MongoDB\Driver\Exception\WriteException
复制代码 / a5 `# w. n/ E) Z' B
% o' v* {9 A; F' W- K b( q
; p2 g1 ?, b1 c/ c( _5 Y: F点击查看全部$ [1 O% s3 y* D4 a
( i- I. `8 i: O6 I+ K u1 ]
6 u c. u0 t$ ]6 `
|
|