管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。) W0 o' Y b0 {+ w! y: {. {
/ W, v3 _* ~- s1 T7 [9 O( |下面用PHP7新的API总结一下:
3 l2 \ V/ i; ~9 B6 Z; S$ d' }# I( U, z; I. r
一:CURD
% U! |# ^5 l% X) c9 \4 ]# B' T3 ?
# i1 F" Q8 u- H1:链接+ @; P# h0 K- J+ D# {
; W+ k+ J8 k+ |. Z% w- <?php
. v: W, B& g# `7 a, p - //链接mongodb
" n( s/ w/ l5 T8 @2 G - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');' {% M; k% G0 E
- root 用户;123:密码;如果没有密码则不写
复制代码 * N7 ^( w, z/ D! E7 o0 O( u
7 p1 W4 p! \* z9 n) g" _0 Z( N
2:查询
$ m- _/ l" o2 {5 C- k
- S' \0 @! m- u6 W5 w- <?php) D& h) M c9 r* }
- 8 z% K$ P" U* x7 N/ D6 d2 w6 d! w2 `1 F
- //链接mongodb
4 W! o5 O( E/ R6 l2 m - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
( [9 G X& F4 R - 5 u4 l3 v3 N6 E4 A
- //查询
/ }( o' e2 N, | - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
. B0 ^0 E6 |! Y+ Z) L0 D3 v5 h* b - $options = [
6 E5 I! t- _( h" Z3 g) V$ `* q! Y" W - 'projection' => ['_id' => 0], //不输出_id字段' T. I8 _5 @% D+ X. k8 J
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
' v3 x/ g8 W# o" K7 ]3 L0 _ - ];
* x m9 c8 m7 D) b2 e2 A - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
2 M( T6 |" ?- _& Z - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合' }' {% s6 [; ?/ H/ [
: n. n/ W5 i9 z# N* g4 K3 B- & } X; T- d& A; S" W) d8 p6 e
- foreach ($list as $document) {5 g9 F, b% p: F' E. H8 M
- print_r($document); ' M- j! q) \1 p/ l, N8 `/ Z! {* L$ S
- }
复制代码 # g+ p/ U& m$ P
查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ U* x, o8 Y: J" c, q" ^$ l. m% ~( _4 |! |0 J
3:添加- c4 e3 p& E" o( k' f4 g( y
" E/ y1 F8 x; |) o. y- <?php& E; Y/ O6 A. W/ F5 |
- 0 y+ D& ]4 M7 H" R" `$ O- r% u$ G
- //链接mongodb' D* |$ s) [: a% {- S, m! o9 x6 Y
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: C4 h3 S- v9 a9 a
) o% w3 I. y' t3 `1 L- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
# A A. D; O- n - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. b; {+ @% ]2 @% |+ z) h5 N
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);& ?5 ^. j! o1 H8 d* v+ k; E
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);1 e* x& m/ O# b I0 e& y5 a! n
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 1 _9 Q2 z9 z# g. D4 g- ], p) _
4:修改
2 A! A. ^) A6 x3 o+ r+ l6 d# f6 Z, L6 P
- <?php
# P' }: i( p/ r9 M - . ~/ `& C/ m6 A/ w7 o
- //链接mongodb
; i3 W/ L- o2 K/ u - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 n( \! R s: D3 D
( p: U' G3 ^( e* _; A- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 w5 i/ m2 n ~7 E5 R, _# J - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
; d1 g3 x% ^* F4 y. ?; h - $bulk->update(
( o7 t) h" C- c4 @: l5 P - ['user_id' => 2],
; ~9 o/ p3 n6 h' A8 w5 A - ['$set'=>['real_name'=>'中国国']
7 m3 F s& x) }6 c; L; O" x1 R - ]); , A( n0 f: K3 T
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
6 v( F& u, S8 @! p; { - //1:字段不存在会添加一个字段;; Z% n/ P. z. _; \3 Z- E
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert2 K- h2 m9 I/ I* Y! W4 X
- 1 O8 G- l! k) H& r; z; X0 ~
- % Y6 m9 A* Q. D3 @% A
- //如果条件不存在不新增加,可以通过设置upsert
- W/ N; P+ {# B B4 ^7 H - //db.collectionName.update(query, obj, upsert, multi);
6 X, N# n* V# W - 3 X1 Q# `2 e6 J9 |: W% T2 _
- $bulk->update(
3 X4 a$ Q. Q% q* x5 I6 g8 j, p - ['user_id' => 5],
' k2 _1 C5 P- T" L - [
, q" m7 s) \$ R9 d3 N - '$set'=>['fff'=>'中国国']
) J( ]) e$ [ i/ G - ],
3 Y. l9 z) h7 ^: z) A5 _/ B6 {+ n# P - ['multi' => true, 'upsert' => false] ) n+ ? T# K+ Y$ }4 c# a5 J
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
9 ^. A. `' k9 E3 P3 h - //upsert为 treu:表示不存在就新增+ s2 {. h$ I' }6 A# y# ~" |
- );. b. ^8 R) p Q
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
3 C6 c' U+ ~& e) z( y2 Y& ` B
1 l+ C" q9 r" K; N9 z6 mordered 设置
. h7 U; p9 h9 l/ U2 b9 P) i1 J* K6 w) \4 S. d$ _4 ~( k* `, Z
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 ]4 E+ B/ ~7 y! e! R
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' _- t* s: @8 i* G3 ?0 U
" R+ W" r* F0 _" ^
5:删除
3 v( S2 F, ^6 w) n0 r% p4 `4 X1 m% m& o8 o* r( J
- <?php5 D$ f+ r+ A8 w+ u" `3 t
- 8 x# U( b. ]8 h W1 }: t
- //链接mongodb
5 Z: [: ?4 ~2 m5 h% o l- k - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) \$ P( W `2 ?2 f
/ r" a3 H" n8 c3 W2 s g# W- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
! h$ y3 r/ q7 }3 S$ W* Z+ P - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! [- j+ z& |/ R$ G: g% `3 u
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段* U- x* T" z( [' H& \. E% D
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
! j d! d6 D0 W# Y1 ? - delete还可以通过limit设置不同删除方式8 Q; d* U" G* f
+ h* } y& R7 A& f. U; t, _- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据& v" l8 x+ v/ y- Z( J, [
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
- F3 g7 d6 q+ L. i
. V1 |; \" j0 ]" ]8 D6:捕获异常
- ?' N- _) F# z" g+ C8 F% y$ e+ X1 u
- MongoDB\Driver\Exception\AuthenticationException
% _# w+ l9 d0 x) _4 [ - MongoDB\Driver\Exception\BulkWriteException
' v) K# U% n3 y% N- S# h - MongoDB\Driver\Exception\ConnectionException
! o+ m N9 L3 ]& b6 n8 x, ^5 b - MongoDB\Driver\Exception\ConnectionTimeoutException
% _" d {* L9 e# [5 A% v3 w - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
8 t; E$ g* o; j& \1 I - MongoDB\Driver\Exception\ExecutionTimeoutException
5 L& g0 l6 \& A& ~9 s - MongoDB\Driver\Exception\InvalidArgumentException6 f- X- u. h( J) J1 }: `) Y/ D' t
- MongoDB\Driver\Exception\LogicException. H0 N' A1 ]: J, j* X2 }
- MongoDB\Driver\Exception\RuntimeException) A+ ^" Z- U& Q7 F0 ]9 C7 k
- MongoDB\Driver\Exception\SSLConnectionException/ r; R0 s7 {; B/ F5 E, N3 V# G8 Q
- MongoDB\Driver\Exception\UnexpectedValueException
& h7 [8 T" }5 | q - MongoDB\Driver\Exception\WriteException
复制代码 $ g% U. b4 u& V0 Y) ~0 p
$ g R/ [7 h: B3 Q5 C
# N8 X) v) ~' t# p5 T& j, X点击查看全部3 P+ u8 g3 g7 q4 o# J( q
: N! `& J! G% |" Z% O- T) o
' K% P, z/ s+ `/ }5 l2 A |
|