管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
0 G: N9 V p. w8 x3 a
4 m% k2 S3 e9 F! X+ y下面用PHP7新的API总结一下: R4 M4 K4 U+ J4 M2 Z9 E" R; P
( _. L% S# t, u8 M8 d* Q% C! Y4 E; q; B
一:CURD6 _( \% z- e b; @
, \4 E8 {+ c* ^5 _: [6 t2 `% Z
1:链接
5 z6 T% z* }# K# F$ E. N1 H& K4 p/ w4 v. ^5 A" m
- <?php! v7 ^ I+ c1 c2 ^! ~4 c. u! z
- //链接mongodb- _- D$ ]5 G) ~3 G3 f- L
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');& e2 t. g- f: Q$ A4 g# P Z
- root 用户;123:密码;如果没有密码则不写
复制代码 5 i S4 ^- s& D! [
3 A4 A g, {& M2:查询1 v2 m E- i% y( S" z
{3 M+ G, v. l' J2 u; ?$ \0 Y- <?php
6 x# N2 T5 H6 }0 s+ x
, C3 N% J5 G; Z. a- //链接mongodb
" f0 X3 e; H9 N - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, v/ Y& p5 [" O
3 e6 `; A' ?8 @8 @. [- //查询
3 J2 P4 i! h* X+ l - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0) Z* S b+ P" v9 q7 H* ^& ~* i+ q
- $options = [+ Z$ e0 i/ F$ y D1 x$ s3 E
- 'projection' => ['_id' => 0], //不输出_id字段
5 u7 }2 n( L2 I# L: S8 o+ A8 [3 J- E - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
7 l7 v6 [/ [2 B8 U6 u& z+ r8 i Z6 u5 I - ];
9 j9 G0 @7 L L6 w - $query = new MongoDB\Driver\Query($filter, $options); //查询请求( `3 ?/ v& { F, Z
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
: h1 x# T+ M5 `3 g7 S- b6 b - 0 ]# O% {- R3 N' J
# v2 f' Z2 [3 `* y- foreach ($list as $document) {3 \2 s0 r+ r! a8 ?7 h0 i" A* Z
- print_r($document);
* K+ s" ~' i% u# W) N - }
复制代码 " ]! T) w1 ~5 H( A8 F% ~
查询更多条件使用方法,参考第二节mongodb基本命令,查询' o" b( W4 u+ r; b. c( x# [* Z' Z, L
+ A. Q ?9 E) W* P
3:添加
' R' m& f6 [9 Y, c: N2 ^% E0 `8 A& E" G# w! [5 {
- <?php
; p. U0 a: W$ ~+ T0 N. a' N5 ^
4 s0 h/ _3 w4 o- //链接mongodb
; R t1 c* `- U! u7 R* S - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
. B+ f+ n4 ^4 h1 P. M
/ V: C6 ]- h6 }6 X n* d& m( W- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 A$ j$ Z3 r) p
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
/ o4 g8 P s: G& x$ w1 n - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);# e9 Y* h! S$ P9 a
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
0 A, B, A! q3 l# D; p! O - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 : D; w2 y4 ^' V5 W/ Z% u7 ]
4:修改0 f& n: d/ M+ l! j: \+ q( ]
/ c# R) f* v6 q% c- \ w- <?php
* ^8 f6 c7 _/ k1 y - - U: l; y0 E- @2 a
- //链接mongodb
: N! I& k4 N) z) k0 X: s4 _" r- R - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 e& t) v5 \0 t8 H
- 8 o7 y4 c) m/ K4 k. t) P
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
% U: p$ w" i7 w4 C$ q ^ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 C4 |+ g9 q Q% I Y
- $bulk->update(/ |" B8 C+ L- w
- ['user_id' => 2],# }- ^- _% ?' t7 F
- ['$set'=>['real_name'=>'中国国']
* H L9 E9 x; V; o, {% h - ]);
( A& E1 k) D5 R/ ]3 s - //$set相当于mysql的 set,这里和mysql有两个不同的地方,. g' V( x% [1 e5 T+ O
- //1:字段不存在会添加一个字段; S4 s& t B7 W3 \6 i2 L
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert. d& l% Z5 O# H- g* t3 n U
- 2 D" x2 o1 I. l" G! j
- " |' c7 d5 v& |0 L
- //如果条件不存在不新增加,可以通过设置upsert
& C4 c8 N) q, R8 ^$ F - //db.collectionName.update(query, obj, upsert, multi);9 p; ^6 B, Y4 q* S# w+ ?
% K% v! B- T+ r( q' v- $bulk->update(7 I' H6 B/ P U# A
- ['user_id' => 5],
3 F. C6 m1 a3 e( Z1 g% L - [
# k$ L) ~+ Z `* e) o& ~+ p - '$set'=>['fff'=>'中国国']
% O! J( G0 i9 H" E; o - ],% ~& \2 m& c _5 K S0 W
- ['multi' => true, 'upsert' => false] ( L' I- T4 s) H7 s/ c
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条8 P A+ b0 L: d9 T8 E
- //upsert为 treu:表示不存在就新增
, n J5 j' Z- q8 z) \ - );
( D. z4 G! o. k" @ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 # }' |% n2 c+ o* g" }% ^( W; K
* t) Q- G! ~4 g: e% I! _; ~
ordered 设置
0 |/ H+ M6 k" ?8 A% i
* [4 {; I! y: g1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' Y" ]6 J3 ~% F+ ]' ?7 m$ p
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
! U% `/ B" X0 o4 I5 t! w R% F) r5 g1 g. ]' T& a2 \* o6 z
5:删除
+ R; ^/ _ l% d: f3 T& @/ t2 s. Q L8 ]. b7 e- j7 y
- <?php
' x+ V+ l& G7 l4 e9 S
$ n# e- R* V6 x6 x7 n7 w- //链接mongodb
2 O7 l! @: Y4 i - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 `1 W @3 w4 Y* }; w1 r
) w" O$ G- I7 b* k- U- v- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
8 @* [' W2 A9 x - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& Z' h$ A) @( D' R" z
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段! }7 o% A) I+ v. G# p0 j
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合: j0 I9 K! c2 Y0 { Y) t0 c. P* L. f
- delete还可以通过limit设置不同删除方式1 y- V+ k U. }6 u& \8 C
+ O* @' A4 R0 v9 N( m k- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据# b% r& E2 Q" @( {% H
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 * c2 I$ b& z. y9 c
% h: t" I$ ^0 w) ?6:捕获异常
% i3 Z8 [0 h8 x) o' G
% B! w: F- ]( y+ Y0 [1 e% S- MongoDB\Driver\Exception\AuthenticationException) e: O! N4 r" l) J; L6 b( K* C* _3 e
- MongoDB\Driver\Exception\BulkWriteException
+ r0 @5 {* G, I - MongoDB\Driver\Exception\ConnectionException
6 M- V- z3 L0 F, t) r3 ?6 R - MongoDB\Driver\Exception\ConnectionTimeoutException! h3 z" b$ Y2 L; A# n' K
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口4 @* v$ W" y2 Z
- MongoDB\Driver\Exception\ExecutionTimeoutException
$ Z! d7 M2 |1 D9 |, s7 } - MongoDB\Driver\Exception\InvalidArgumentException0 Y2 s3 x, M! ^4 g
- MongoDB\Driver\Exception\LogicException2 X! s3 o8 v- {5 _
- MongoDB\Driver\Exception\RuntimeException
& s' Z. y" B3 I - MongoDB\Driver\Exception\SSLConnectionException: B3 f' \" p: Y7 N3 G/ h" q9 n
- MongoDB\Driver\Exception\UnexpectedValueException* X/ x! X! K, {7 S, l
- MongoDB\Driver\Exception\WriteException
复制代码
# `, D8 R L/ R; k; H9 ]
& Z1 f7 _9 g4 m5 x
$ B' {+ a6 x) k; E- ^0 v' e点击查看全部; ~' D8 ?8 m5 D1 N4 ^7 q
9 {& K, O5 V. U5 I( V- \8 G* I9 u
3 x5 O! \# }8 z1 w7 M7 }" y |
|