管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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" w: ]$ C M. g
. M- k5 i7 Y: V4 m. x) \* c6 w
下面用PHP7新的API总结一下:2 ^4 Y* R/ u6 |4 o9 }) N8 Z
" C: K4 K9 ^' q5 A4 ~
一:CURD
" j. U' F7 F$ R$ b0 C' U
! R' U$ B/ n* }9 F( }1:链接
# d5 M# r2 k8 g* F) r, s
# G7 E4 K9 b& O- L/ P1 S- <?php9 b% J9 h& Y$ R, k0 {# z. {4 p. b
- //链接mongodb
* ]) ]2 q$ D4 x - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ |* @, l5 e( y8 S$ D) Q
- root 用户;123:密码;如果没有密码则不写
复制代码
F' k0 s) x3 S& i# v* M
+ D$ ]/ g4 N9 c! r, [2:查询) N' K g* h* o
7 @* i$ _$ q: L; K/ c) z# t, d. g5 A- <?php
1 o) x; z d( q% `- j' h$ C - 5 p& [6 [% N: O- Q: ]
- //链接mongodb
7 u5 ]+ \- K$ q" X - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& G$ J. J9 r# Z7 @$ Q: r# R- u7 ]/ _ - 1 w, f1 |- s9 |, w" [6 ]
- //查询
4 j2 ~6 Z7 q4 a+ `" p" p" _4 l - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
* F5 y3 Q+ q! e1 g: t - $options = [) H5 ~# n! r ?, e4 J" _' f
- 'projection' => ['_id' => 0], //不输出_id字段
7 ]+ R3 S" t, v9 Q# g - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序: A; b( l1 f2 P9 h+ H. D
- ];9 C3 o% g: A- p' o6 o; i
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求- e9 P( P. @" p* C+ p# d9 o
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
|1 X4 P7 G+ Q: t - / A5 q. q$ L" c+ W: T
- ( i/ F' }% O' A# U! a! j3 K
- foreach ($list as $document) {
9 ~3 O( \( @" C& `- w3 S7 g; Y - print_r($document); $ z* Q4 t2 V5 f" p) ?5 p$ {
- }
复制代码
0 d/ k, t3 H* [" v1 m查询更多条件使用方法,参考第二节mongodb基本命令,查询
" }! f2 V) E1 T# ~
' T; f m0 x$ W, v8 P. U# p3:添加9 C0 I, y5 }8 R# ?+ D
$ |2 m- m; X6 m: [/ K/ J- E- <?php4 G. \9 k, e7 H( I4 C
- B- x t `6 y: L: o a
- //链接mongodb
3 {' q4 `! S4 e c" I+ W1 t% Y - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' a$ S6 |) E9 g" e
- ( a$ V3 q+ g$ x# |6 K$ Y& V& g
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
# y4 ~$ Z8 `' o K! h - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 V4 {+ |& J" g3 {+ B) S! e
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);* U9 X0 y6 c, d& H- J* _/ [- ^
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
, M+ X2 V- @3 A) n# t - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
1 Z2 Y# q5 {4 U" r4:修改
, F1 p9 `: q- b. d% \$ e" D) g) L# r U2 r, }+ K! H3 ^5 R( b! ]
- <?php
% Z! G% w( w- U/ t7 B8 A - / b# L3 C% F9 ?/ z* X
- //链接mongodb @- A" I+ @+ _4 X8 D
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! f0 s$ V' g$ h! B0 u8 m* O - / A* Y2 v% K; J
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 O/ Y8 o5 [: ?' W+ N7 U; t c; x
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ l! b' L1 Y, r; y9 K. B# B+ x - $bulk->update(
, }) x5 V' L5 ~: q5 d) J - ['user_id' => 2],
% _9 D/ d6 T% i2 P; _8 l X - ['$set'=>['real_name'=>'中国国'] y5 ~, _8 o |/ {) @
- ]);
8 ]0 }( J# G, K) L K8 P( z: r - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
3 \3 u. U3 j; E$ e" \; f; s - //1:字段不存在会添加一个字段;8 t1 X0 K6 m7 [6 u; a" t
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
/ v& Z9 ?" V S' ?( ~% g, I, b
" U. C3 y& A+ C. z4 U) g( m& Y9 U
3 }# h. A# Y8 z3 s$ r' }7 ~- //如果条件不存在不新增加,可以通过设置upsert1 J1 }: }. _' _5 }7 j
- //db.collectionName.update(query, obj, upsert, multi);3 n: {5 [; B# j' w- D6 K
4 _. A" m, a% y6 \- $bulk->update(8 O! j6 ` n1 J% b" s e/ h
- ['user_id' => 5],! u, { D3 x% X1 n4 X
- [9 V& S' x4 _# }5 g' w5 ~
- '$set'=>['fff'=>'中国国']% l% u) j2 Y0 E4 p2 j( c8 I
- ],& n! L6 H+ ^& V5 P
- ['multi' => true, 'upsert' => false]
: w( D; B' c, O$ o$ D$ E/ M8 R e - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
3 ^ q* ^% ~/ l - //upsert为 treu:表示不存在就新增
; F- ?6 d1 ~- b" O( k4 B - );2 o; F/ R* J4 c0 t/ c
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 b) p4 s% }- E; G- h3 h
6 ^5 G% G0 w. \5 `( }7 \5 g' C- j: oordered 设置
+ e( d3 |% T. c
2 Z# `* l+ q9 O g# ]+ [ P( S1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 T) k) K( g: v6 Z' W$ e
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行2 l# H" U7 @# Z7 v1 \- ?
; [ E1 H. v1 q: c% u6 j; ^/ H
5:删除
2 |- _5 M$ B4 l
1 q8 i. X1 L) Y! ^0 z: D- <?php z9 c$ M3 W) `" M9 E- m* c) [
- & E5 A. i: I g& t z
- //链接mongodb
b" r# X9 f8 O/ T - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& L" E4 z0 X) J$ y
- - g( X2 \3 q$ A4 D- k% d' v, N X
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
" l0 {1 f" Q6 X+ { - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( ^& G3 Z' a d - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
/ R: F2 b$ V5 r2 J - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
5 [* ^# L5 d. D8 n) E1 K, w! e - delete还可以通过limit设置不同删除方式
( g8 t) s2 Y7 k/ B7 {) R7 p5 b
7 T* `9 K4 T2 u- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
- P$ o1 o, A. Z& J5 g0 \7 q* l - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
3 \& a& ]: a+ [5 m* T( o2 l* m" r8 `
6:捕获异常
/ H7 e Q5 m- k, H1 e! c9 B# t
; u/ x0 L+ [) s: E- MongoDB\Driver\Exception\AuthenticationException% b q6 l9 n% r5 w. T. d0 k
- MongoDB\Driver\Exception\BulkWriteException
+ P8 H" I( ]* H - MongoDB\Driver\Exception\ConnectionException
3 p- [0 B. C2 B }/ f& x4 C3 w- a - MongoDB\Driver\Exception\ConnectionTimeoutException. D. ]/ p0 E$ C) B8 ^# j; Q4 k" p) |$ o
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
$ o1 l) s2 ?$ g3 D7 a V) y - MongoDB\Driver\Exception\ExecutionTimeoutException
% i# b0 n# k+ F - MongoDB\Driver\Exception\InvalidArgumentException0 b6 ]6 m7 j; E6 p2 Y8 S+ m
- MongoDB\Driver\Exception\LogicException" W/ L, ^. s# n' j6 i2 n. p2 h
- MongoDB\Driver\Exception\RuntimeException
- _8 e1 N! a3 g/ k. P# _ - MongoDB\Driver\Exception\SSLConnectionException
3 a3 |, v( U' @& _$ ?3 a* g - MongoDB\Driver\Exception\UnexpectedValueException
U Y% r/ Q: `- g- `5 u - MongoDB\Driver\Exception\WriteException
复制代码
$ ?+ ]3 [* T$ h0 D, J
) o: B4 H, m z6 V, _
, h' z0 _- D) V4 \* x. f4 G点击查看全部
( D5 l- h3 ]0 e. _0 |. _6 I# u1 O4 T
" ]' T4 k' ^$ G+ o, ^& _) q- }5 L2 s6 y. {: s' C- X3 b
|
|