管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
- P% H2 K- t) Z& J+ v1 L4 W
{8 N# W. U8 i+ ^7 E2 e7 P' U下面用PHP7新的API总结一下:8 B. {! y. }" D1 `: W
, P5 [. s# l: I+ ~0 Q! r6 p% U, \一:CURD+ V: S$ f5 o7 p$ d; J& v1 i* y
2 M& F" I) m2 ?+ e" |5 p; g
1:链接. b- a# @7 r( Q6 V: k3 Q
0 A7 a; l% g$ v( s
- <?php
$ a8 B, F% l8 B- ]# p7 {! o6 H - //链接mongodb
9 G& g4 O9 w' y' K3 V - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
' f: x5 \5 n* ] - root 用户;123:密码;如果没有密码则不写
复制代码 ' y- B. p, F3 ^) _7 U# ^6 U) J2 T
- B) C* e4 X& h' O8 k% t
2:查询
' u% L" n) O; y+ v1 _* |" @4 Z8 B7 i4 a8 v* d2 i' J% R0 T, R
- <?php
& W9 u4 n8 q% Z D4 v/ t
J6 e+ q& X$ T6 d# s- //链接mongodb1 O% W0 H# b. G# ~2 Y
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ S; ?# P: l+ N
, P; Q! I2 H5 B9 M, k- ]- //查询
; j! }3 j$ u$ e6 L4 z/ t! F, B; ` - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 v) g w5 Y E
- $options = [
% G0 O6 s1 h- i7 m! Q$ d9 I - 'projection' => ['_id' => 0], //不输出_id字段0 n2 p; U& d6 D; C- l& ~
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
+ z: f# P% U6 ^. Y7 p" D - ]; @4 ?) h4 f( @( T/ |
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求2 \5 c7 ^3 n ?+ B) M" o$ g! H- }
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
' Z9 S# `& X# t4 @. i: B, N - $ ~; O3 f; a. b' ]) Y9 P
- ) O% ]9 c/ l# k. H* ~0 I
- foreach ($list as $document) {2 e, |( J/ V$ j: l/ p% z
- print_r($document);
+ y) ]/ \4 r. n- |9 w" r4 e6 L - }
复制代码
0 t1 u& I1 G& u查询更多条件使用方法,参考第二节mongodb基本命令,查询
; x2 p1 G( |6 {5 ?5 u
+ s! K: q, n$ b# W r6 V/ K2 d3:添加
+ M) }+ s7 ?8 O( V. ]8 R ?, a7 f3 r
- <?php1 Z% y" D, t5 U( `& e4 C% N: g7 \
; B8 K( Y/ v; r$ v: v- //链接mongodb
9 r; M& P6 C, H; o' I- e( X - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
( {7 e. M& v9 q P* x% j
& g! e& X6 b% A+ S2 \. U, `7 B- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
" _% i& F8 i: \/ l; c* V- ^ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 i7 W% _* t5 K5 ^2 N ^' I" B - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
9 ]* e( Y% @! W3 t+ y - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);9 Z& M% Y5 X/ r8 L
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
1 G; i4 j9 ^0 d5 m4:修改
( w2 @5 H( e) p) j4 _% Q. } x
/ {, U: f# E1 ]# U, W- {- <?php4 T; G! s2 B+ Z: P( V
- Z9 _+ ]6 c( J( v& _
- //链接mongodb2 N) r2 z# J/ W1 C( n( O2 X6 I0 N
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
0 Z# _' [$ ~9 w! S
p1 J1 N9 V7 l1 | K- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" H$ O4 l# A& n* ?- ?8 j+ q* F/ i5 }
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
# g+ Q" G) c7 ^3 v6 {, _% T# j - $bulk->update(
! q) ]+ Q2 D, t. _- a - ['user_id' => 2],8 t: g/ u9 C% ?2 ]" D8 |; l
- ['$set'=>['real_name'=>'中国国']
; }/ N3 w5 P. J) l' H; J3 Z' P - ]);
! k4 R0 v$ q- }" h6 t6 O2 I - //$set相当于mysql的 set,这里和mysql有两个不同的地方,6 C5 Q: B+ Q& ?
- //1:字段不存在会添加一个字段;
1 X/ D \+ q2 R. k& @ - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
) v+ Q$ P- s0 X/ N5 z6 G) w$ ~ - 0 d. y( W ~( U$ T5 U2 h$ @' P
- 5 h: d# F* T" _
- //如果条件不存在不新增加,可以通过设置upsert- ]+ v. s& ~ b6 |
- //db.collectionName.update(query, obj, upsert, multi);
4 f J4 p' V1 V1 R. ^; T; Y- J - h. ~+ I+ P/ N3 d9 S9 [
- $bulk->update($ l; F4 `4 _7 m! K
- ['user_id' => 5],
d% _' z# }7 Q4 w( c - [ [# ~2 {. ?: e9 M8 e9 i
- '$set'=>['fff'=>'中国国']' z/ w. [9 o+ }
- ],. W$ f2 e) ~! E' ]" V0 M$ _
- ['multi' => true, 'upsert' => false] 6 k$ M2 Y/ c2 k
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
# U! V5 h4 v" S - //upsert为 treu:表示不存在就新增
& e* F0 n2 d' e7 [- R - );, s9 M+ P' w H& E4 v
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 : ]- R% U. ] i6 F% k6 x
: n3 L% V9 o6 J& d. x8 Rordered 设置
- Y$ y9 j: C |' ?' d& V( v+ h, S- ^8 Z) R/ @! m* I) o
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
. D$ }; e7 ~% Q7 ]6 l2 C" s* X2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
" j! U( Y9 m( j$ z& K( O
j" J/ Y1 T' k5 D. ]5:删除4 i! n. j+ A+ q& J& U$ t. _
2 T9 c+ F, K5 Y0 Q8 h3 e4 n) ]
- <?php1 R# }) p% S3 ~* }
! I1 L( V7 ?8 x- //链接mongodb
- i% P5 Q! e: ]6 N - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& f. Z2 t( Q$ V
) |* n$ n- T2 u6 {1 ~- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
5 w6 f! b# `/ _& S3 ~/ i( v - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行/ W9 ~8 Y. I4 }+ C* J2 U B
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
+ [% O; V: @* ?0 c - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
% P9 W; T) L4 o8 n; O - delete还可以通过limit设置不同删除方式
" g5 `* l6 _) k: t7 r7 [! o r - , _3 d; y/ A- _; R
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据 S- I+ r! z8 @) e# a% L' U
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
N$ L# C/ {2 e9 D2 t
8 v9 Q% ` g+ `6:捕获异常
# F7 ^( f& j" M, l+ Y5 ?+ E: X6 S& e$ O* Z7 Z1 V
- MongoDB\Driver\Exception\AuthenticationException
/ [, Y% g; s) M% L$ q( e) T# S - MongoDB\Driver\Exception\BulkWriteException
+ p4 b9 `2 c2 |6 D - MongoDB\Driver\Exception\ConnectionException
; k4 h- N$ F# u- R1 G: x - MongoDB\Driver\Exception\ConnectionTimeoutException
0 W' f$ @# n2 ~ - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口# c" G) B5 u9 T/ z2 T+ M* D
- MongoDB\Driver\Exception\ExecutionTimeoutException
' ], K; r# H3 Q6 i0 g - MongoDB\Driver\Exception\InvalidArgumentException
$ F; O8 N( H( H" B- Z; A - MongoDB\Driver\Exception\LogicException5 }) Y$ F7 F( `4 t4 s1 }
- MongoDB\Driver\Exception\RuntimeException
) w, k5 l4 N: G, g O$ o; k9 U6 M - MongoDB\Driver\Exception\SSLConnectionException
7 z, g! G1 B( `2 f% b8 \" E+ v - MongoDB\Driver\Exception\UnexpectedValueException* l5 W" m, u* A& I" W0 C7 Y
- MongoDB\Driver\Exception\WriteException
复制代码 : u0 `; X1 p. W) S1 k$ l2 \
! y6 [+ v1 f `" m1 K) P" j: O" ?$ h3 i2 d6 w" p
点击查看全部
* N4 I4 L; R- ^ H: J. Z) F% w2 o0 ^# A* P8 j; @1 M% A
* ]- l# y" I4 r- L. Q) g$ I
|
|