管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。( N5 L% l8 ?- w2 h0 i) X9 e
$ a+ @. @$ `; R下面用PHP7新的API总结一下:
0 A! E h% S: T: s3 [
) Z( q, a/ K- y. X; _' D5 ]一:CURD
6 _9 a% N8 O' @. S# M) @
: z5 ]: V/ H0 d$ A( Z3 H1:链接, Y3 t3 F% Q+ G5 Z+ n5 c
- O" N" E- o8 X; z
- <?php
: T3 a1 E1 S0 {8 K - //链接mongodb1 S; W \9 w3 u* ?) F% f( M1 s
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');' B5 H) L9 v; w: x4 u
- root 用户;123:密码;如果没有密码则不写
复制代码 5 P2 ^) T- ]! W/ U* j
: B- D$ e6 V) u( O ?: c# D4 l2:查询$ c" d* Q+ y' ~2 Y! V8 a: x
) ]% B! W P% k- |" q1 k
- <?php: m7 p& |* L' V- B( |
5 X6 |/ B+ q U& X" W; l% a a- //链接mongodb: s$ S6 P/ W3 ~" b$ y
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# T- R3 W2 `! V! _* w1 t- i
8 u- B# x {: ^5 K5 _6 t- //查询- `7 m; u; P; M; _0 _
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0. Y* j7 F) z$ U, G+ {
- $options = [+ b* F9 \" P% t' E G
- 'projection' => ['_id' => 0], //不输出_id字段8 l$ K) c; F; } Z- m5 `: _
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' @$ q7 I/ M4 q2 N& `6 c
- ];
" B3 d$ J! I& A' m: ~. } - $query = new MongoDB\Driver\Query($filter, $options); //查询请求, r/ N& k2 z7 @" R c% B
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
0 o2 G: a) Y' K2 O% `. @% C: k* g
" m# O3 D% }3 [6 o2 x! Y
( G( n+ K+ Z8 a/ M- foreach ($list as $document) {$ y8 v9 X* I9 n
- print_r($document); + d" R! a5 v k! {7 p4 n+ w4 }/ X
- }
复制代码
9 ^- X2 v# i- S! J/ S1 y查询更多条件使用方法,参考第二节mongodb基本命令,查询- {- q, L( K( o* o) [
5 u0 D3 B1 t0 R; p
3:添加
* y/ w) x, K ]/ G8 j Q+ X P- F4 h9 | e
- <?php
M6 M- R3 _& d0 S1 |* b$ Y- J- d/ S - , V, s! I+ } L U, \% Z
- //链接mongodb
2 k _1 K$ ^1 b' K - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
8 X2 _7 V0 c4 P/ J) Q* o
/ x/ d2 Z' d* Y% i, G, H7 h- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 n. `" h2 A9 _% u! g; h
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
& j$ z( r3 n9 h) _ - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);5 p, [" B0 |* y! N( |% A+ x
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
* G3 O; u' ^3 b9 T - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
5 p4 X7 b0 L' e" o- O4:修改2 W' p! |% R9 A! ?" V! r/ ^4 m' e
: x9 h( W4 k7 ^, N
- <?php, A) G- a- I: n+ A ?
- " {& w9 E1 L' Z3 P
- //链接mongodb. ~9 v2 p9 N3 J3 ~; a& |
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ v9 O. F- K8 o! K
- - ]7 a4 z$ o% T2 D$ \ z
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" c, A7 }* W @4 V( Z
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 R( `: }! M% Y
- $bulk->update(
. N! G0 x) ?( s2 T6 P6 p - ['user_id' => 2],1 y8 v- z+ c8 X3 [* o/ |. W
- ['$set'=>['real_name'=>'中国国'] |" G3 ^" Y+ |/ v
- ]); 8 l0 _( B: G6 e! U3 M; M0 W; n
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
* A# N7 V4 W1 ?( ~ - //1:字段不存在会添加一个字段;" ^" ]" I3 D6 O5 V. f6 l) G. }
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
+ V% p0 v4 w" j& {% t$ g/ N8 Q - . \; }* M* E" A4 F6 P3 ?
( M4 ]9 \7 E g( T/ v+ K" J- //如果条件不存在不新增加,可以通过设置upsert5 S* w' f9 i1 ~$ S# c Q
- //db.collectionName.update(query, obj, upsert, multi);
( e( ~! ?. t1 \
, Y) F2 M" e7 Z- $bulk->update(; [( B! T2 ]0 ^/ P; o) x
- ['user_id' => 5],
* A! s, H& a' p2 j& V - [
7 R8 O4 I0 y5 S" k) W% c - '$set'=>['fff'=>'中国国']
. V) _0 S+ O; C - ],5 h. t" S+ b6 X; H; H* h) I' V
- ['multi' => true, 'upsert' => false] 7 i. ^ ]/ o7 x- E! B2 d, _
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
8 \6 ~0 @' D! Q% `: Z - //upsert为 treu:表示不存在就新增
; s4 n8 ^: Y! e - );" C+ {$ W% j) X! ?
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
j& ?& X6 O4 N5 t( J/ z# I" e. S6 M6 C) x$ @
ordered 设置
2 V& c8 Q4 S1 d
8 ?, C" |# L% Q$ d! s& E0 ^0 b; L- E1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) f% s) y5 o x8 P5 Y, W2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行$ |; g' V% t7 H8 J! S7 P E+ q6 |7 [
- [) e5 V9 W. h6 ?* O4 M
5:删除
/ w# ]6 j u) R- B7 `0 Z. N
h( M! r) A: N& z# v8 c- <?php; S! f4 C7 P- g1 c/ g8 Q; J; Z; ?
1 \5 C0 s( D. a4 J/ S2 c# F' T. q- //链接mongodb' p5 |& O2 b! v
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# P" k( o6 t* Z+ r; Z5 Z/ ^$ x
4 [& J! u6 S* h. K) ]5 R5 p- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; u3 E" K4 L" ^: C6 B. `; k
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ |: F$ g2 S( R& G* \/ \! j" X5 \
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段5 ?* _# q2 S& L6 ?7 X$ O
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合6 O! ], ~$ S7 w4 B! R( M& Y
- delete还可以通过limit设置不同删除方式2 \- T ]* w, v8 i' C) g
: t0 Q% [: o9 @, H! R- I1 s- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据2 s" H1 e$ i/ E
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 5 Y! Y. s! `0 }( c: O1 F
( p% N: Z, ~" P, h6:捕获异常
' F8 r1 n. g* U5 v. W4 p
6 N0 B+ c, y0 z2 ^% S2 \- MongoDB\Driver\Exception\AuthenticationException- m$ S- c- z6 E- @6 P% Y
- MongoDB\Driver\Exception\BulkWriteException
g0 ]! S( e* O t# w$ n- I - MongoDB\Driver\Exception\ConnectionException C {; N y/ L. c9 M& _8 e
- MongoDB\Driver\Exception\ConnectionTimeoutException* J' n5 E+ v! Q; s0 v8 n
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
8 C4 E# H: _" s1 X4 u - MongoDB\Driver\Exception\ExecutionTimeoutException
6 T" i6 w. E" Z7 ~) E - MongoDB\Driver\Exception\InvalidArgumentException
; Q F# |$ b( b: z - MongoDB\Driver\Exception\LogicException, V' ^; e. N7 p- I7 C' ?
- MongoDB\Driver\Exception\RuntimeException. @3 v5 O! X) w' n3 h* H# e
- MongoDB\Driver\Exception\SSLConnectionException: K1 G8 K# s0 M. `+ B) ?
- MongoDB\Driver\Exception\UnexpectedValueException2 W- M J4 {3 p9 y5 P
- MongoDB\Driver\Exception\WriteException
复制代码 9 U$ X q/ q* C' i2 Q( j4 m
, t/ [3 Z7 A5 w7 G, w3 K* o8 b
& N! a7 F% J) x4 g- O8 ]点击查看全部
! A" G4 j N' \8 W7 N
6 Y0 o8 ^) A5 F) i: L, R9 ^
- {# N+ E0 S0 ` x* g) F |
|