管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
7 W8 n$ ?% G; ^- M d
: J) B& c- y; |; u1 U# b3 U2 O下面用PHP7新的API总结一下:
! k1 k/ t7 ] J* n5 i! x
" e* L) T, n: X8 x/ x一:CURD- _& U% l2 ?9 A$ |2 _ t- q& x
$ z) ^# I+ T: _6 U# U N
1:链接
# M4 ~6 d3 W* d* p
3 G6 i1 R% M4 ~! q4 q& i! Y) \- <?php1 R0 Q0 C" y+ W: Q l# G
- //链接mongodb' ^0 z; |. O7 V8 f
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
( v' q; ?$ z* l, @2 T2 P7 b0 H - root 用户;123:密码;如果没有密码则不写
复制代码 + D2 ?6 l8 m) O8 @: ?
+ x, u) V5 K( h9 @* o! J& P" M9 s2:查询* @0 L% W' g5 `5 m, Z7 a
3 q2 c1 A! ?% A# i. i$ V- <?php; v% T- m* G I, y t
- + _7 q& @4 Y5 g# w/ F
- //链接mongodb# f* u6 [$ ]3 C& n8 j; m( T: i# ~
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! H' T' ]% B6 ?/ \' q
/ ^& M8 ~% p* W5 [2 P- //查询( t* a* r) U' b. ?
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 \% H# U5 P1 l
- $options = [& i% S+ i) ~% m
- 'projection' => ['_id' => 0], //不输出_id字段
0 l1 U) }1 ^1 M. ], v* S - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
E. }9 B$ O% i& m5 A/ u& z* v, n - ];. ^# a* r9 M9 K
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求% h6 b" i+ ^$ s5 i% P- @8 r# ]$ S
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
5 R, x+ g5 b. R - 3 u5 R7 o: _! r6 D6 D2 G# j: ^3 r
! T, d6 D# ~; e- foreach ($list as $document) {
% s1 X& }) k' z- ? - print_r($document); 7 V% t; F2 z$ i4 q
- }
复制代码
+ Z9 u* l6 c4 v, i查询更多条件使用方法,参考第二节mongodb基本命令,查询
- R' U& x6 F! @5 }. n- S5 v) W' ^1 t4 }: {5 M+ J! A; m) p* }
3:添加6 j, m V @4 M) @
/ q! T @2 V, S! F4 G
- <?php
2 a/ Z( J* S, |5 C6 Z) {3 V5 U
: T7 C5 V: Q; _( V0 v/ H- //链接mongodb
6 Z5 E* O0 S* t" J$ T - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# P1 j; @, I4 k" g# k: ]7 {# a
- . l( f* f8 _1 ^& I$ _# R
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( Y9 I9 y9 h. m M) v4 v
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* t8 l3 X; F, Z5 g1 \
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);" K/ d& Q; }6 r) }4 T# ]' w
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);/ U2 c: M1 @/ a! t. l& \' U
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 / A1 F" Q6 |( O* t) _3 x0 @' @
4:修改
6 w! S* y8 y; {9 z
. J+ f- R1 s/ @! q8 k! M- <?php ?% N; S- H: M. [4 a7 ?
- 3 l$ U0 |0 O( ^ G. i
- //链接mongodb. L- v% v! ?/ R0 p. d$ w: F
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
8 h4 P w5 G, @3 n- q$ W- c - , M) d' O/ }1 ?6 x4 @9 A) a0 @
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( R5 H5 _- |# q4 g+ A( O
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ I1 _! I, v2 z5 ]4 j' u) s+ B
- $bulk->update(
3 `) D m6 {. z( O# r) C - ['user_id' => 2],' Y- p: m- A9 X/ _! c1 h0 F
- ['$set'=>['real_name'=>'中国国']
% h! t! X& n6 i! N - ]);
7 J2 Q1 o$ D6 r! U - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
# `5 q! n6 w1 E, ?" i) e - //1:字段不存在会添加一个字段;* W: r7 c& n/ J/ v
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert: A" a8 k* o% d# r! b* E$ d& w
6 x6 T( {: Q* e2 O
2 B; k" \8 H' h, _' K0 U- //如果条件不存在不新增加,可以通过设置upsert
, O2 a( P- @( A3 M - //db.collectionName.update(query, obj, upsert, multi);! d% \/ z2 P8 J' { Z& W
- ( T. m- S0 o0 `
- $bulk->update(
! Q; ^! B7 n. k - ['user_id' => 5],
1 _6 q6 U+ p# v I5 f6 x - [% k; y4 J2 R7 ?' j6 F! c$ \
- '$set'=>['fff'=>'中国国']; U3 A M0 k6 [0 l9 |
- ],9 x* ]7 I7 e$ y* R
- ['multi' => true, 'upsert' => false]
/ [" q9 i3 d. j/ V# ` - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
6 n P% V$ z6 @ - //upsert为 treu:表示不存在就新增
' w8 w6 b0 A; M; [& { - );. G* Y9 h+ I( O8 G( Z1 E
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. r1 p; w3 L* _, q7 F( u x+ L6 l
ordered 设置
, L: t+ I, {; O6 W* e- f3 s
! a1 }2 L0 |1 ~4 W4 C; D7 T- H1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。" @: @. V% o$ y: ]9 S6 X
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 M! |: i5 i7 a5 b3 o2 D) G6 ~1 ] ~
5:删除
) j$ P" a& n8 }- G1 M9 P- S1 j
5 r) R6 h$ k8 V& E3 r7 O" Z- <?php
- ~- }% L; C: F5 D: T7 {" I# x
3 r! w% D& q! y5 j- //链接mongodb
" A1 s, T6 G' ]; _/ N6 l5 j - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 E6 k/ E2 t: j( `8 ?
1 p+ x: W2 W Z# {- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( ]& X7 F% |( W& {9 W. N' P% M
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
$ U% w8 o, B2 q6 z: L0 C - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
1 @2 i3 r `- ^* d. r1 u1 | - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
1 a1 L. P; e }& B - delete还可以通过limit设置不同删除方式4 P! F1 c4 @! @$ N
- , s n. @- p( e- C( h K2 V
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
- T. ?3 x' C8 P - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 # e P/ f( q" Q5 q3 U# K
1 Q* _4 H( b. o4 K H) ?& c6:捕获异常
' S& l* U9 |3 C3 X: E- Q0 C7 N
. b. K" Y) u, w( Q% L' S2 F- MongoDB\Driver\Exception\AuthenticationException! Y9 B0 Z% ?' E
- MongoDB\Driver\Exception\BulkWriteException3 y$ p8 o4 a! R: `
- MongoDB\Driver\Exception\ConnectionException) V$ E5 g3 g8 u7 X: d
- MongoDB\Driver\Exception\ConnectionTimeoutException
8 A, r, \+ R2 O0 f+ d% h2 o - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口* ?( Y* x4 P2 ?6 u3 h. d; D7 n
- MongoDB\Driver\Exception\ExecutionTimeoutException
3 h! W @- _# p( t S( e X0 ~ - MongoDB\Driver\Exception\InvalidArgumentException
! X& K5 J$ z& D- I: g - MongoDB\Driver\Exception\LogicException+ A/ {3 k& T5 y' L; a% F, h
- MongoDB\Driver\Exception\RuntimeException3 `/ F' s9 u7 n+ r" H
- MongoDB\Driver\Exception\SSLConnectionException" K m6 B8 n' i
- MongoDB\Driver\Exception\UnexpectedValueException
$ ~: f( v# Z) @- u0 _% `$ g; \ - MongoDB\Driver\Exception\WriteException
复制代码 ' J. e h$ N/ j% ~
4 }, d1 f1 f0 e: h
8 q" {( S8 g z( U- @1 d A点击查看全部" i/ ~4 I0 h% q
% J7 a9 A0 H2 D/ u8 g
6 _% E! s u- d3 t |
|