管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
, _. S; P8 u3 ]" y( g. J1 G* n) ~, m& u
下面用PHP7新的API总结一下:
3 ]& L5 q# C1 U: U: Q y/ a! j; E- E: ~6 o
一:CURD9 b1 J/ G+ i5 g: R; y
8 i3 A9 l3 x! M5 F) S' i f
1:链接2 R3 R' a8 y, A4 ^0 I# {. }2 @% s2 E
9 n1 R7 V2 ?& ]4 a/ G3 }% t) P. ]; u
- <?php. N$ ~9 c- x6 d! r
- //链接mongodb
9 |5 Y9 C; K8 ]( ]1 s2 b% F4 p - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');/ s6 l9 n- U" z) Q. g8 g
- root 用户;123:密码;如果没有密码则不写
复制代码 % \+ Y7 T- m1 L; o" e0 o
# J4 A, d7 P+ E- B) J9 L2 ]& ?2:查询
$ @2 }$ u. X: I* R# i G6 K! r9 ~0 P z! V. S6 T+ P5 w
- <?php
( ?: r1 `2 g8 @. p) B) r( u1 \ - & A( B @6 d9 I" h3 R/ c
- //链接mongodb
1 N) h5 B/ D x& s - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
2 F$ f/ u! d. b5 Z - : k6 l6 B1 l, [7 Q+ ]% p$ X
- //查询0 G5 x$ v5 o! L1 h n" n1 L
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0% i/ D! y' _ X6 w6 R" Z* |
- $options = [7 N( w0 z4 H- |7 }. ^ X4 ]
- 'projection' => ['_id' => 0], //不输出_id字段
* C$ W' u0 B" P+ b6 M% d - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- n( P9 m; U+ r
- ];
4 ~4 N. {4 b2 G4 J7 a - $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 M* j8 K, a; U% `+ n q0 S- B
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
# f! I5 E$ _$ z. `3 @ - ' U" q- s+ I% K) U9 _
) Q1 `0 K. Z3 d- foreach ($list as $document) {
' R5 D8 o: \6 n! Z5 D7 Y) H3 j! d; ` - print_r($document); $ ^5 s& @: F# D) N0 I" E% g
- }
复制代码
5 Y! E4 x% H$ n查询更多条件使用方法,参考第二节mongodb基本命令,查询
0 }7 K: B' t* ]
" y7 ]! A) o m2 ?9 z& N% U- H3:添加
7 C8 l& G+ X, g# [7 n: R4 r3 T0 y5 o0 T% M: ^) l$ B' Z3 |3 z3 W, z. z
- <?php
! l5 ]: H% L, [9 T8 P, n
: f4 {# A% M* `4 b5 R& J% d y- //链接mongodb
0 m) p; \2 p( c6 I - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 O$ C) S: q) L+ ]/ F% L
% x, a& B. ^2 K4 n1 c2 p7 `) c- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 }! r4 E5 Y" {0 Y' M
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
1 t# Z* e' N+ c" J3 @7 d: E( @ - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
# Z4 q" @7 f% O+ T+ a$ _ - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
# W. | {5 b Q; ?9 x( Z9 B - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 j# z! N0 P4 e' ?! X
4:修改
* S0 E4 k! B: M+ J& i( A
4 Y, [0 @& k+ d' L" Y$ r- <?php
% L) R0 V& e j- m+ }
# j+ P6 ~- C0 D$ \6 U4 f- //链接mongodb
6 J2 n9 k: U# Z; V - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 ?1 ` w& f/ D# m5 [ U2 ?
- % m( k5 x, d) u3 ~5 a/ r
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( D& U5 `/ ]" I0 R
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 D. M4 P6 a8 o% v/ x% s# f8 B
- $bulk->update(
; `: u( V/ B' l/ E- y! w - ['user_id' => 2],
8 u: A* u" v) M+ {7 u- [ - ['$set'=>['real_name'=>'中国国']
1 z, h8 o2 u2 a - ]); $ M" F1 i7 P5 a) l
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,4 Y2 y- Q4 N9 x: |9 f) u1 @ `
- //1:字段不存在会添加一个字段;
1 G# N1 c5 Y( h4 N; p - //2:mongodb默认如果条件不成立,新增加数据,相当于insert$ |; z( I2 c: w/ O O: C6 n
. I6 b* b" y1 V, X2 H. Z0 I- " g/ Z, U; h$ s9 N; _$ ~9 ?
- //如果条件不存在不新增加,可以通过设置upsert( w# u+ k) y" C9 z5 H0 M" q
- //db.collectionName.update(query, obj, upsert, multi);- _7 B0 j- ~" H, Y# W0 a+ Y8 o6 ^
8 Y9 |" }5 h6 |# r Z- $bulk->update(; @% @* L- ?. v5 ~2 Y( J+ ^% b
- ['user_id' => 5],& w# P X3 s$ f1 `
- [. a- ]6 [" C0 {! _* D& t
- '$set'=>['fff'=>'中国国']& i- Z: t6 {; B/ a) o
- ],# O) z2 ]* z8 l" N! k/ o
- ['multi' => true, 'upsert' => false] : t- d9 p7 I9 q. F9 z6 f
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条' q: c w# t7 p' }
- //upsert为 treu:表示不存在就新增: [) u; s9 j1 ?% Y. ?% h
- );: k& s- x$ ?* k
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# G5 ~7 Y6 T2 _* y
+ F" Q. P2 L8 ], Z7 x" G* Bordered 设置: w0 \7 Y4 Y( F1 A$ N8 u
6 G- A# g" c: g" R1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' G0 Y1 }3 y i4 s4 U8 A. I% G
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行& Y& ~4 N* q1 v/ l: s) C
8 \$ v: e' g6 v& H- {0 j2 b
5:删除 e R! d' b, M. m4 }
/ f% N# f$ a k
- <?php
! d* f8 l( g2 D- ?8 L
7 q+ K5 c9 \$ e+ E/ c6 e- //链接mongodb& d7 F$ k1 U/ w& Z0 G+ B
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 m* ?6 m; R* ^
! t9 k$ g) ^7 r1 g/ y0 x( V5 V- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 r3 G$ M- [/ g* h( o0 f3 f! V
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
# j* }8 x I5 [' v+ ~% A - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
. m# S3 |, w, Y5 ] - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合2 w" K# ~) |; X4 m6 V
- delete还可以通过limit设置不同删除方式
4 S$ B- r: I3 y- e - # K( o z3 q- Z* ]; R0 M
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据+ y. g' A- e2 b* v" p" k1 V! g g
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 - M6 @+ ^3 v7 m# c2 ? l9 h
5 V4 R- C- Q/ k7 r6:捕获异常9 j% D2 g. E: U* P' R. ?9 h1 f
) z: S0 |3 i4 F. @- MongoDB\Driver\Exception\AuthenticationException
7 V, {2 D$ C# r/ g6 O: h& J - MongoDB\Driver\Exception\BulkWriteException1 h3 D4 O. Q! }8 C4 O5 N
- MongoDB\Driver\Exception\ConnectionException
5 f% l+ h1 p8 {4 Y - MongoDB\Driver\Exception\ConnectionTimeoutException
- S: T' u* o* E5 y) {# y: o: m7 R0 v - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
9 X1 Q3 E' t- M - MongoDB\Driver\Exception\ExecutionTimeoutException
- G5 S' F* [ b+ b; a" k8 x0 \9 j6 B - MongoDB\Driver\Exception\InvalidArgumentException
, R! j: u5 [6 _% U& o - MongoDB\Driver\Exception\LogicException
* e) J J6 ^6 d; D- |2 `& ? - MongoDB\Driver\Exception\RuntimeException4 T2 c* |+ | \; S# L
- MongoDB\Driver\Exception\SSLConnectionException& D8 k5 L7 Y8 |1 g
- MongoDB\Driver\Exception\UnexpectedValueException& T- K5 F/ @3 b) R7 V3 ]4 o+ T
- MongoDB\Driver\Exception\WriteException
复制代码
7 j2 Y! X! E" L O% ?, u* \$ t8 o* F7 ]8 x- ~ F" d4 P. I' l0 \
% r% l7 h! ~% |& z2 d! F8 b8 k( j点击查看全部6 s2 o; }1 ` U+ A( i) Z1 i8 p
+ k4 J5 {, q+ y/ l2 [5 j* s8 I+ H
5 D5 K# Z2 h3 A& P/ K+ w/ i |
|