管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。8 l V d; |3 ^8 W5 V' Z
9 G9 U5 ^! s. d9 S; {: b1 V* p ^1 w下面用PHP7新的API总结一下:- M0 }6 a" h. Q" w7 K5 I
0 l. a$ q X7 l' s: X ~* l
一:CURD
, b* J; J& R) u" _' L# i" D2 w2 L! R* O4 h. H1 Z/ T+ A8 q
1:链接
s' }/ \7 z# e d; v" _" @8 J- g: @( x8 f9 [
- <?php
- j$ L( S4 u) D4 }. M: ] - //链接mongodb
3 E9 _+ k" G' |0 x: e$ G - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
4 T* q5 a( v' M8 b' @: i - root 用户;123:密码;如果没有密码则不写
复制代码
) U9 a# h( s0 [/ M( R+ E$ T
* e' }) M' A% t. p9 k2:查询
! z' L3 s4 W$ L; [! [: P+ @' ]& y/ K& b" T5 N
- <?php
: ~5 g, K- E! ?1 A. y
7 Q; ^0 D& J9 c4 O0 K- //链接mongodb: y# ~4 q/ u& ]( o6 K; G6 u
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& [- A, c- a3 k: q
& O+ Q; ]8 b& b9 D8 f& f; I- //查询
# s2 d; l! `- c - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0* M6 j% I! y P6 u: F8 M, _0 z0 g
- $options = [2 s4 \% u/ Z7 I1 R3 i8 R" l9 I
- 'projection' => ['_id' => 0], //不输出_id字段) V0 c$ L* g2 C- J
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序3 j: V# R7 j, _
- ];
) O! o. W J: ]4 M/ L! x. w: C8 _ - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
: b' @3 |6 U$ L; x; b1 j; p - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合& J# l# D# K9 Q: U( p4 d/ d# O
& l7 n7 b0 X) } b5 b
: C0 `" [( s1 V: R4 Q0 y- foreach ($list as $document) {4 c" J& s3 H7 q) j
- print_r($document);
# S3 W% X) c7 o5 E! N - }
复制代码
# @) n" o- A9 g* V: u查询更多条件使用方法,参考第二节mongodb基本命令,查询
( ]7 _& X+ r0 {8 ^# `: F+ n! V
) `, c! i4 z4 P2 K1 l- X3:添加' u$ n8 T2 r4 b q/ q! M! i" w
5 W9 v+ i# N+ E8 T8 k- <?php
" }4 L$ c) U- v% `+ W3 _6 t
o8 B, [# x5 |+ L0 k( W1 _ N+ T" B- //链接mongodb
4 }. r, |; r1 \+ V - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# V: q( ]) F$ S9 ]' [
- . n9 R( S& [( H) m3 ^+ d8 e% O
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
K; Y1 ^* b/ Y* L8 X c k - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
3 Q, e* L* D/ y0 T# v! t - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
, n) z8 B" @' A. Z. \ - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);8 A: g, {; w4 z3 \
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
3 Z% t) U1 y( o) q+ w4:修改
" l$ O! M! T8 n8 Q4 @! o
& Z; H) B4 ]. I7 A- <?php3 z) n, }9 }3 v* O. g+ V3 f1 {3 S
- , | y# Z" Z N4 h8 ?# r
- //链接mongodb: C* R6 C: ~5 j, w( Z! q
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' |, E) L+ k- V \- ^
+ @; [0 G: M/ }0 i" g- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 |- E: C, X, m# h- w
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 l6 R! V2 [8 s) O - $bulk->update(0 H# ^ S+ g/ t9 r
- ['user_id' => 2],
5 z8 o6 l/ T0 @# |/ ?; q9 O& t - ['$set'=>['real_name'=>'中国国']
7 t. B1 ?5 ^9 l* q( Y1 Y8 ` - ]); & T$ T2 i% n. F: k! Y% K
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
M. D8 l, n9 M$ c& E% k - //1:字段不存在会添加一个字段;; ]' \5 l/ o. r8 u& V7 `2 `+ Q
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert5 t1 Y# u4 l/ ^0 Y7 [- G& _
. C, u3 Z- |+ [: s7 K, \- 3 \4 [2 k- O# q5 C1 c
- //如果条件不存在不新增加,可以通过设置upsert9 u; O. ~% O% _0 S& c; \! b6 F$ J
- //db.collectionName.update(query, obj, upsert, multi);6 w+ ^- |) e+ ?( e
- X% X( Y2 h2 L, [. Q% w- $bulk->update(
4 E( p. A4 w/ l0 I, L& k - ['user_id' => 5],
/ V- _" W' P, p$ k9 ~4 c - [$ J, |7 J/ B; t, K# G& A
- '$set'=>['fff'=>'中国国']8 p1 B8 X, \# [9 J4 |* W7 R- l( @
- ],
) a" g! W0 _! P' N - ['multi' => true, 'upsert' => false]
% z' j2 ^1 \" G$ [9 s4 e - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
d5 q. c% S+ P4 R! V6 x8 Y# d - //upsert为 treu:表示不存在就新增
$ ~) L' k$ j$ i6 o5 C8 A! f! f' | - );
. s& d( N, r6 K Z+ l) M8 O+ m- u - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
3 h9 A& }! t6 l1 z2 A3 o* R( x: \0 e* \2 S0 l; c' u2 x
ordered 设置8 K5 V8 R+ n B7 f# E/ _ b/ p
7 N3 m- u% y* `& s! ]6 v! k
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。( r( _2 Q% ]# j0 C5 O' ^
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' q7 J5 f2 Q/ c, ~$ S
) T+ b3 B$ S( [; O8 ^8 K
5:删除0 I h% R' e7 N# t, ~
/ Y. G$ ~1 d7 }4 P2 c6 G$ S! p- <?php9 t' e s& p2 D5 U6 v+ r5 q
, c0 O6 u/ R7 T- //链接mongodb
0 m9 K5 G% k" g) x9 m7 m- p |4 x - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 s2 E" ?& }! u
- ; i r2 `6 m; B4 j! w
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% H+ _/ r; O/ v+ e8 } V
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- \) c8 M0 R* R4 O4 _( |
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
8 s: r# y5 m! _9 Z N+ i' ~" v4 N - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
: }4 a0 I, O. H/ R7 O - delete还可以通过limit设置不同删除方式( i1 C" A P V8 P9 H8 C& \6 I
& h8 W& |/ v) {" @5 \" z- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据9 D6 I7 H% U# D" H) u
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 2 M4 e0 L& k6 W
7 n% V' W( R2 Q# E
6:捕获异常
- t: k9 h. D2 ]& u6 T+ V, E* U2 h% h# A, M6 F
- MongoDB\Driver\Exception\AuthenticationException; Q0 o* T# G& D
- MongoDB\Driver\Exception\BulkWriteException
! B! ?3 K7 B* } Q1 E - MongoDB\Driver\Exception\ConnectionException3 T$ ?( R1 ?' e; D. D: L
- MongoDB\Driver\Exception\ConnectionTimeoutException
' o- e" \* D! A$ } - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
6 E1 I. Z7 i/ ` - MongoDB\Driver\Exception\ExecutionTimeoutException6 J, t9 K4 O# S x
- MongoDB\Driver\Exception\InvalidArgumentException
1 v; ^+ K% W8 E2 K/ N0 ^5 O( j - MongoDB\Driver\Exception\LogicException
% ^; R5 z& |0 \4 x8 C0 x# M - MongoDB\Driver\Exception\RuntimeException
0 V4 P1 y* T. Q; | - MongoDB\Driver\Exception\SSLConnectionException* H: F5 E# v* A; V
- MongoDB\Driver\Exception\UnexpectedValueException- ~# o/ Y% E# r) T8 f
- MongoDB\Driver\Exception\WriteException
复制代码
3 H) O3 I8 K5 x5 J2 t {4 o% p6 N5 R/ S6 J
# S$ q( a2 u9 c- M" i
点击查看全部8 L& r; S3 [6 h
( ^4 A* q& r* l4 L0 ]$ L5 V
, K8 t. ]7 D- I/ G9 ], D+ h8 B |
|