管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。* G4 [4 D$ `6 w; x
6 @, @. B9 T" P/ ~% B [
下面用PHP7新的API总结一下:
& `7 G; d$ D1 \0 H# A% ]) c7 d6 P j
一:CURD
, R' P7 ~2 q) i. U' {# A8 A L2 f- n$ d' k9 X- \& |8 A+ C
1:链接* b. N P4 W4 z6 G& T
) ~/ G2 o) g; _ b2 x- <?php8 p5 F% m- Q: a- Z
- //链接mongodb$ S" ^2 F& P9 R x5 f& [" a2 ^8 d
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');. c% `6 [ K/ a5 O" ~! H
- root 用户;123:密码;如果没有密码则不写
复制代码 # H) `* |; P7 N7 I
: U- J$ K0 |9 n: V9 Y$ K
2:查询! S ]0 M, K1 ?% _
2 n* |0 l4 r# ^( P: ^4 U- <?php
3 ?- ~% @. F3 Q, @1 E - 7 f; r4 i# L3 n. s$ W4 k
- //链接mongodb. y1 }+ {6 f8 q1 P1 q @3 d
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
% `8 W9 ^: `+ D8 D/ ^) {) t8 Q g" { - ! K9 L: W7 ]; W4 S0 t; G2 _% T
- //查询
( ?" H% U) G# i3 P5 ? - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
9 R4 X( i0 L3 Z - $options = [
. @: G4 t0 i" l( I9 D. w% o9 m3 l* m& E - 'projection' => ['_id' => 0], //不输出_id字段# K2 F# X4 j8 e: s% X
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序1 X2 n" q/ |& H: n3 m+ N0 @
- ];
, z; e( @( r9 r; G# Y; G' h - $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 s8 d" Z! P+ P. Q. R6 ]
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合% D0 {# `- n" I5 K3 r1 D' _5 K
- ) N9 h+ \1 }: h+ C3 Y, G! ^, y
- - d: R, Y V- W7 b4 J4 R
- foreach ($list as $document) {
: v. q7 f# i8 Z+ M - print_r($document);
1 A1 W- T, {0 i2 Y& W" }0 B! d - }
复制代码
) ?" a" V. { U Q查询更多条件使用方法,参考第二节mongodb基本命令,查询# F4 |, Z3 }/ z) F' V/ j
% y/ o: a, v5 f$ D% j
3:添加* y' [) ~! Z( h+ p
0 y4 H) ?8 x0 z8 U; l4 D* w2 u: D7 p
- <?php
3 r8 N( h' Y3 }$ n8 E& Z
$ D6 S" W H& b5 D h- //链接mongodb
, ]0 U% s7 b+ M3 _6 J. g - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 K" D+ z. F; f) I7 t! p% | - . }0 P+ [( ~3 b, Y! W3 }# ]
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
" U8 I7 g2 _" D. s9 U5 Y5 o - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
' Z, O; t1 p, U - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
* S+ _2 o0 w# \5 s+ z) I1 X; S+ X* b - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);* Z( q' ]9 L! q! C0 f
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 # T A; V7 G8 `0 `
4:修改
$ X7 R- P; H: ^7 J# {. H/ d5 L0 R" K! B# _
- <?php
2 t+ R0 v3 S8 B9 n: U - . P. j3 ^5 C) |) ]+ M; p, B
- //链接mongodb
; C; l% K, U2 @9 |& ?% d+ E - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ [9 }. j9 t: I1 ^0 P9 @- z4 R - 2 M8 U* N% l4 f. `. Z
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 ~- o: V3 Y5 @; B
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
/ D }# o5 S0 B" Q& {+ G7 E* j - $bulk->update(& {/ D n" j ?) W- ]9 J
- ['user_id' => 2],' |3 V" L& W$ k5 b0 J
- ['$set'=>['real_name'=>'中国国']
: [+ D; _0 j8 i* E r2 ?8 k* R' D - ]); - {9 S* m; `: F
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,) J, p% {1 {. k7 l! \( f6 O
- //1:字段不存在会添加一个字段;6 m, @1 o; h0 ~- s
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert# H& h- ]7 A1 E: i
- & K6 y/ X5 d* D/ `+ R% u5 b3 s
. w3 Y) u2 S N- //如果条件不存在不新增加,可以通过设置upsert
. N( c9 O( I" a3 f - //db.collectionName.update(query, obj, upsert, multi);
. {4 {3 V% x( ]# N. J/ j& J
, q/ S; I! \% u5 U0 C0 W- [9 A- $bulk->update(. d& _/ @# H" B7 Q1 s6 g
- ['user_id' => 5],& S1 C) v! [$ q! t+ G
- [9 L! Y1 E/ }' V7 I% i
- '$set'=>['fff'=>'中国国']
% l7 c0 Y' Q$ u* j; @ - ],9 E# L& l* l8 U5 r
- ['multi' => true, 'upsert' => false]
* j4 ~# y4 T0 Q* g: p - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
: e7 f$ i) I1 c! f( M: s { - //upsert为 treu:表示不存在就新增
8 B# a) n/ e% {& _ - );
( m3 I2 G4 q: O - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
! O* \/ \( D# P7 u; m, Y& i9 l5 x
ordered 设置
! w- a+ }% H. X. P: b
" D- }' k2 H' b9 X' E' K5 D1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 |' |. O. p+ B# K
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
1 y/ v: u- c& @! n9 o& r6 |
" d" J, ?3 R; k' ^5:删除
/ v9 @7 o, G$ Z6 X& |
; R8 t) E3 ~# ]. k+ U5 N$ E- <?php( n, r4 K0 J4 b3 i' W- i
- 1 H8 Z# d+ ~% u3 M4 n G( ^
- //链接mongodb5 d5 P9 N, D) f' r/ k
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 q* E) m, j; b9 a
- 8 I! ^- x& A" i8 y' `( Q
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; C% z$ R/ L' ~1 Z+ A/ C& x6 `
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% V$ s! [0 X( |4 E - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段9 F/ q4 D" r) [5 W- U9 d5 F4 Z
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
, W& d0 X. V P5 z0 @7 m - delete还可以通过limit设置不同删除方式
6 P% j7 n" k; u' j2 R
6 Y- h* R) r4 v- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
% ~1 i- B- [" T& s - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 " [( s9 g. Q! Q: C! u! i" M8 T
# E. \/ T( \1 a- B6 p* _0 y" U. B
6:捕获异常
# A; G! h9 f* c; i$ e# T! e
7 [9 F+ p0 d1 }! S; L- MongoDB\Driver\Exception\AuthenticationException& x! y9 x. T( A7 a7 y- ^, C
- MongoDB\Driver\Exception\BulkWriteException
* h! k" {! v: x2 X7 ] - MongoDB\Driver\Exception\ConnectionException) P% I0 ~! Y% O- O% I& y5 d
- MongoDB\Driver\Exception\ConnectionTimeoutException
' t: d7 i7 ]5 h4 F; m - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口. {% b4 t& T( Y/ u t9 s- T
- MongoDB\Driver\Exception\ExecutionTimeoutException1 O5 ?9 o& r5 Q4 x
- MongoDB\Driver\Exception\InvalidArgumentException
7 k3 B1 `: S6 [8 L7 `) }! y' r5 F - MongoDB\Driver\Exception\LogicException
8 }# a: w7 s9 H* i( A: v - MongoDB\Driver\Exception\RuntimeException( g* f+ h1 \9 n3 S+ p4 U; R
- MongoDB\Driver\Exception\SSLConnectionException
3 q8 V7 s. \6 r6 N2 L# O - MongoDB\Driver\Exception\UnexpectedValueException; v6 \7 R$ M7 J, @- [) m: V0 l- ]
- MongoDB\Driver\Exception\WriteException
复制代码
, F* i) s! k& t2 K+ q! ?2 g; t5 w6 l. K" D
Y) f& S' c2 r5 Q, g+ S1 Y# D
点击查看全部$ [6 O8 R* N0 ]8 D" e
7 m( L8 r9 ]: s0 e1 s2 Y
, d# ]" I* e! A8 e2 N1 U |
|