管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。/ O' n0 S- c1 W# o: e! T! W
' r3 ]1 ]6 I7 r$ m
下面用PHP7新的API总结一下:3 D5 j0 Q* j, K. h& p0 D
, x7 i$ n/ w2 ~0 L2 D. C/ }
一:CURD- p+ m i) o0 W& B
' G2 R* c, Z* x: a: S7 Y% a/ W1:链接
# M) j' A6 z$ H/ y: J y2 [2 J, r: A# L; }. @0 O% e$ f
- <?php
4 P' s" K! f% a* Y' q - //链接mongodb
5 m; n( j5 L! I+ h - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');6 v R0 R' \, ~3 J! ]2 t0 l- G7 N
- root 用户;123:密码;如果没有密码则不写
复制代码 h3 E- t* X- h# ?7 y, X4 v3 n
5 I* V. i3 n& a
2:查询# @$ h. ^. |9 ^" {8 E/ [0 A
2 v& H X/ n5 a/ L+ A' x' D! f v- M
- <?php
0 c M, d( X: L3 d$ a5 G& g" m3 v
2 U L# e' E" L# `9 h0 ~- //链接mongodb
3 o6 y+ W) n0 l! b$ @ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
; W' E2 }' c9 Y% Y
+ t N: d" ~# t7 o- //查询8 U4 n4 M; D, _, q( p$ ~3 J
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0" g# p& S0 @+ P& l8 x
- $options = [' n% ~5 d! r; u# Y
- 'projection' => ['_id' => 0], //不输出_id字段
. r+ D c+ @# ~) u! ~3 j5 z. O - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
/ G; B; ~. u( @ - ];# I U* `; ^4 F) B
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
. }2 Q# D1 F" T9 M! f( `2 I - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
0 g/ R- B: s9 c' R( D
) V: h. p- Y! M3 f3 \( S
% o; ~6 ^. Z# g0 h1 P- foreach ($list as $document) {+ u9 ]% ~; y; T8 z0 S% }: {3 a) i
- print_r($document); " `# k, I1 t+ F) {: g& k
- }
复制代码 ; w0 M; h' o1 f) P7 x0 m
查询更多条件使用方法,参考第二节mongodb基本命令,查询$ N( Q- X' T6 ?; ^+ l/ C1 r
! \# ]0 [' h M, f
3:添加
+ B4 a; z0 I3 N8 S& H, U* c
/ }/ o+ N- G9 v0 l* n7 |- <?php
/ {* q$ \$ E- k, B
* ]% {. O3 q" p/ n2 O( C- //链接mongodb
W* c/ E. U; [. u - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# W/ Y1 t* T0 t, ~) E- P1 u
( r( o% C' `- ^. Z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
$ T7 L# U% F& x& P5 B( Z2 Z6 Q - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 s) J- e" N( P' i
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);3 c; a4 w1 V5 y1 D6 v+ A
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
0 q9 p- G8 ?" F; P; e' S - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 # h" W0 K2 z* V/ o, D
4:修改3 E3 R/ w6 u* u G: K8 Z
$ [3 U2 E" {6 x3 G+ B9 ` [
- <?php5 r* ]+ J! L S: L S" K
- 7 Q$ T/ {) ~( i
- //链接mongodb
; q: u5 H/ D; ~& M% r. R - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, W! H" R @$ D8 b# e$ j5 ]
- # P% Z: I, B3 X% K9 R6 \
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
) |$ ]8 P2 _; ~+ u3 F - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% b* P- b( C( S2 j& x# r3 N) S
- $bulk->update(4 ^/ B3 B8 B; [( u) U
- ['user_id' => 2],* X, n4 [5 C( g5 a+ E
- ['$set'=>['real_name'=>'中国国']' V" g, E2 {# A
- ]);
+ w/ m9 B- {3 H( h( m3 q - //$set相当于mysql的 set,这里和mysql有两个不同的地方,. Q5 B- ?' n( \ S
- //1:字段不存在会添加一个字段;# k1 x: q( T8 ^5 A1 `& k
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert# r. O1 ^' x ^6 ]" R( r
- . m0 O0 t6 t4 `- h5 ^$ i
% O% s- y0 L/ a; n% |8 q( u- //如果条件不存在不新增加,可以通过设置upsert
5 g4 L, F, i6 [- L; ~/ w - //db.collectionName.update(query, obj, upsert, multi);& `& o; y7 P+ a' ^7 t2 R* d: P7 {
: B+ @, \% A- x$ p" i4 _. f9 \) w- $bulk->update(
( W$ G2 b7 M1 j; M) @ - ['user_id' => 5],7 M0 L' b5 r' c* |8 N' r$ k
- [
6 ]. e; M3 t7 U% R, o - '$set'=>['fff'=>'中国国']) z( M8 k8 m% w% A2 d& v
- ],% ]! l$ w9 v4 J
- ['multi' => true, 'upsert' => false]
. g* e6 S$ n8 B - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
; Y8 T) U9 |$ n2 \( ]5 B5 w) P - //upsert为 treu:表示不存在就新增) |$ u6 c( M! H6 w$ w
- );8 S0 Q5 a3 p% `& x
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
7 O- U; H5 [/ e' W% I" m7 z4 L% |2 \; s, T- V1 ], V7 }+ A* B
ordered 设置
- H; @2 Z; k; e" { s* {6 R! W( b1 ]6 N
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。% C+ r K- [5 S$ M4 @2 E
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行( _9 e; H8 t3 ?; |' l* ^
. A4 O3 h7 ]8 ~" { {& v5:删除
+ M2 W) ^9 q* m# P4 U' M5 X0 ~) P' [* r
- <?php
' a ?0 G$ y' [0 v6 [
2 P7 [1 E* \" @ ~* S8 I- //链接mongodb( J: I8 U7 W8 e7 @4 q7 E
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, l7 I2 g8 ]! L2 f
4 \3 I8 J; w3 U) s; C& _4 z' d' S. j- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
g4 s: P1 B" A: ~6 | - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 n- e" s+ _& e6 y4 k) o
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
: Q% e* O3 h. |4 v) d4 R - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
4 {6 h% T. ?. Z* X - delete还可以通过limit设置不同删除方式2 R2 j1 V) k) T5 d3 N6 I# g! {& W
- * u* z6 @3 B+ v( l' `) u" u+ N. u
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据; T( h. I6 |8 Q |' r s ?7 ?1 C
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
6 z* m$ k2 Y4 |8 ^* A7 l
8 a4 S# ~( A6 T/ F2 G/ B+ ^1 B. L6:捕获异常
7 B! @6 i3 [2 c' x; |
: `+ s- F+ h: {& ?- MongoDB\Driver\Exception\AuthenticationException) i* j4 S! W/ b' n8 D
- MongoDB\Driver\Exception\BulkWriteException/ T8 i+ U3 J4 D1 a6 d, D
- MongoDB\Driver\Exception\ConnectionException
% y& Q0 U' b( a* M% U - MongoDB\Driver\Exception\ConnectionTimeoutException% X6 Z. v% n7 W# j
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口( ~. f" e3 s( W( V7 |5 p
- MongoDB\Driver\Exception\ExecutionTimeoutException
1 Q# D8 J/ Q6 B1 \8 Y - MongoDB\Driver\Exception\InvalidArgumentException
W' ]6 c+ ]& u( [" P, O - MongoDB\Driver\Exception\LogicException
; M1 o. y+ y. n8 C - MongoDB\Driver\Exception\RuntimeException7 t z" {+ E8 A i( g$ ?7 `: V
- MongoDB\Driver\Exception\SSLConnectionException
3 k* Q1 U ?( V7 F - MongoDB\Driver\Exception\UnexpectedValueException
/ J$ h/ c' ~, Y0 _2 ]/ a$ Q - MongoDB\Driver\Exception\WriteException
复制代码
8 O9 i0 C5 ]4 Y) o! |# O6 Z0 l. w
9 W- J1 Y8 ^3 t
点击查看全部
( {1 F, E/ [& T+ ]3 L. P1 V7 A2 Z! ]) ?* F( Q* h1 [
3 a3 H x' N9 ^2 ^7 @
|
|