管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
" G5 R! s& l* O
2 B5 K M; J1 q& G下面用PHP7新的API总结一下:
& m; X$ X$ v$ C4 R9 a2 n. L5 Z6 h
; u4 J( ~0 _; _1 ]& }6 c一:CURD
/ I3 j2 F1 p7 N( c3 r/ ]7 P7 J$ W% c4 n$ \* s* a. K% i
1:链接+ v* O. G0 W) p& y+ i3 U% d9 W
! q7 }3 l9 J! s. W+ E
- <?php) J4 C+ \' A+ S/ E) ^" r1 ?8 X* ?
- //链接mongodb: p2 [: T+ o: y. l1 G/ X. r& R
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');! G( J; l8 P3 d
- root 用户;123:密码;如果没有密码则不写
复制代码
# R# P5 w8 v5 m- W9 h& l' |4 B/ g e
% y4 G8 B+ t8 U# c2:查询
3 {; b% m" q+ t( f
2 l: Y+ k ?2 z* S3 d: V5 ^! [- <?php
. A, F! Z9 h2 w$ D6 W - ! V' Y. g5 A: x- Z. }# t
- //链接mongodb
; e1 T0 l8 ]0 v4 X1 t9 M - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
% M p2 B) X/ `& R' O& |) z6 }
+ j. m9 x" r: Z- //查询
5 Q: ?3 _. I2 q; s/ a - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
2 a6 s$ p: @& b2 N - $options = [
1 s% @1 _! s1 L5 ?0 H/ C$ |& q - 'projection' => ['_id' => 0], //不输出_id字段' `3 F4 b a; @; U' W) {3 u
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
; u+ y' e: n9 v; D. g6 } - ];1 d R/ T6 C: y9 }
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求" n; W5 c5 _3 }5 S% D+ z/ k2 h4 h& N4 Y
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* _% R4 t! W% M% m
- ' x$ I+ f7 l' E! R/ F+ Y
- % b, B, `( n1 l8 s8 i9 _
- foreach ($list as $document) {
( D/ s* g' g: u% O - print_r($document); ( I e! f) k6 Y" R7 R/ Y
- }
复制代码 v5 z6 }% [5 y* D
查询更多条件使用方法,参考第二节mongodb基本命令,查询
% d- ?& o$ ~, R) r$ @) q& v0 g9 B! U. i6 F% j$ t ]# t
3:添加# F$ a1 c0 g& ]6 E5 y- r
+ a' k0 N" C. [9 y
- <?php
; ?/ M [' T% Q - : Y0 T6 A& Y/ c8 b* ^* l# H
- //链接mongodb
% b/ n2 ^7 y1 V - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" y3 G& e3 s" M- O4 }' N9 z
6 |( N: r- _! V, R4 v; n+ ~# L* u- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
/ @4 ?% y! N5 J# { O- x q - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 p% u8 Q7 {, B, T7 f/ @ - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
% k; Z3 A f3 w r' _) N" {2 Y - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);6 E: f8 p0 [4 n% l$ w, C) u! n3 I C
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, K% z; a, s6 C ~$ x4:修改
# C: {4 p5 R' p7 i4 U+ _: J
! z. n! y1 }% |8 W3 W; ]/ `- B4 }- <?php9 L$ L' F0 D* n* H4 n
- \6 e/ }$ `" c5 ~* e7 e E4 q- //链接mongodb' K) V, ^! I! M$ O7 e
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* c" E' }7 ~9 k, L7 ^
+ ]: _# T* ?, A! K1 Y4 W( j) x- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
" V' n0 x& L: g! k, I8 J) W2 O - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 \/ p5 u& L, ~0 j. z' C
- $bulk->update( V9 c0 D1 v, @+ ^% d
- ['user_id' => 2],* n+ h/ O4 O7 ~2 T7 y( j+ S
- ['$set'=>['real_name'=>'中国国']
5 a- o. Q& S. m5 y3 x- \ - ]);
6 ~2 n. I7 g- }5 i' C: }- G - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
$ b2 d0 M( }) M+ I/ ~* f - //1:字段不存在会添加一个字段;
% D8 ~* D* H2 g1 f0 ~% i - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
- A% w. r' L2 S2 U X* @; U- c# c2 H. U% N/ {
1 i8 u3 I. f: m, O5 n
, q) M1 H, y# \* r- //如果条件不存在不新增加,可以通过设置upsert( Y0 `: }* [$ \0 b+ {6 Z& y. i8 A
- //db.collectionName.update(query, obj, upsert, multi);, _1 W# t* d: V# n; A" v9 {
- $ B; T) Y! N' w1 n4 P7 p
- $bulk->update(5 v1 N4 u! w: }/ }( F* w" X9 M
- ['user_id' => 5],2 E/ I- z l) b+ [% y9 d& o4 ?
- [% i: D8 G3 S# y- _$ \/ }3 X6 J. Z
- '$set'=>['fff'=>'中国国']1 c! U4 ?; J+ m# H3 Q9 P
- ],
/ c" q2 S& u8 e" J$ L - ['multi' => true, 'upsert' => false] - a* H! i) _3 _5 H
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
. D& w9 F# z$ G' N8 q! _: h. _4 q - //upsert为 treu:表示不存在就新增
5 c% U6 ?3 l# t3 u- R/ h6 Y$ j* P - );' e! X; C% v( b& Z' \' @
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: P4 D' d6 g* d" y
; _' Z8 S& @+ o0 [ordered 设置4 W: _$ d' K2 O2 l3 H! U* ~
/ H, o3 }! Q% A& a- p% n) y1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。. r3 u: X" t; N
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行& f& W4 T, w0 D% E
( p5 b: G& a2 G8 W0 h( a5:删除5 \5 t* u; ]. ?* L" |
6 X) Q+ n6 O/ A6 s
- <?php
6 `- c+ n6 ^3 J0 r
- z8 M. S; T$ b& c* C- L- //链接mongodb- n8 _- N6 C& d5 u S
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); |6 }; W( g5 l5 Z& q# Z4 K$ W
- ) b* I4 m* J& T! N2 n0 s
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 _2 s O3 }. A
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 x6 r4 G2 M8 ~: G, U
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
& a5 H6 h& T* N8 y8 F - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合8 M9 m& ]0 w6 C
- delete还可以通过limit设置不同删除方式5 A4 u( P+ s5 L) t
- 5 f2 W8 Y E" |( H
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
1 Y) B: I8 o1 v - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 " J% o- T! |4 K7 ?4 w0 H
9 a0 [) Y8 |/ K0 J# v! F6:捕获异常
1 m/ t# o, _3 g4 ~, m# Q* O4 b5 S: f2 M7 p* g3 W
- MongoDB\Driver\Exception\AuthenticationException
+ d0 b5 e# Z' {- C- C - MongoDB\Driver\Exception\BulkWriteException! O9 |4 c0 R0 S; e( K( u/ b1 {% j
- MongoDB\Driver\Exception\ConnectionException7 e/ s5 ?; `7 V h! T2 V( [* v
- MongoDB\Driver\Exception\ConnectionTimeoutException
4 G, g! k* |1 E0 D4 ` - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
# ^; ^. s2 [. h# X0 ?- }8 P - MongoDB\Driver\Exception\ExecutionTimeoutException
! A2 s2 Q; |" e - MongoDB\Driver\Exception\InvalidArgumentException+ t4 a- R3 _0 C+ B2 [+ v
- MongoDB\Driver\Exception\LogicException
: ~# g6 N* }) \1 N9 C$ G* ^ - MongoDB\Driver\Exception\RuntimeException3 l2 E" ?5 G0 S4 J) Q
- MongoDB\Driver\Exception\SSLConnectionException
) F7 w3 D* s5 n7 y* ^' m; v - MongoDB\Driver\Exception\UnexpectedValueException, f, I" [* V, `* N
- MongoDB\Driver\Exception\WriteException
复制代码 T: H0 U2 `4 }1 }* Q( C
5 a) C! U# j% Z* _( O. P. P7 Z. W/ C; s5 T) m
点击查看全部
& k$ [/ w6 g% g- }6 A/ u4 Y7 q* C, y. T8 q) J y
% L+ Y" N& p F ]/ @% W
|
|