管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
4 D! R# r# x; { Q. O7 w! |( }. d& z w% g
下面用PHP7新的API总结一下:2 g' y! i6 ~' T& [, N
* Y! q3 h7 A1 I! F! A5 s, u一:CURD* m3 u9 d$ | F3 u6 K& M9 o, s
) `! X: y4 C9 A5 R% I3 p0 K6 ]. |1:链接4 h( k' N4 r0 P4 X/ h& J4 b
4 x' b! g1 ~1 d8 q- <?php
$ D1 S2 A" |; i: N6 i( g - //链接mongodb5 N' s: l1 ]5 O- M
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
- y! K) B p. w- k- N/ u. o/ m! Q# `* l - root 用户;123:密码;如果没有密码则不写
复制代码
0 h% n! t( _5 p: U! _: H* N
7 K/ V0 e8 |7 w6 X/ g4 k; ?4 G2:查询
3 Y, x: ^; \2 }
7 U. f9 {* M6 d. f: C; ~6 K- <?php
. a9 q5 T% Q* B! d k5 {0 h; N; E; [
( p3 _& L. M+ j8 w2 i% o- //链接mongodb
$ y! d4 w" L& |" M: J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) T8 s9 d9 L- I J8 t
3 P6 ?/ M0 n: ?; I( \- //查询1 @2 ^; t6 E$ {
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
: M9 k4 l/ X2 [7 k - $options = [
6 |: w/ q$ p8 n3 ~. F8 j% d0 d - 'projection' => ['_id' => 0], //不输出_id字段+ ^' N, U, q# R' h+ i
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序# ?0 Z- P. l6 h5 I
- ];! b% p, S$ ~9 U8 q9 v/ `: Z
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
, U1 m9 {& ?- D6 F2 R- I - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
8 b: Z2 O. ^9 x) G9 H - 1 J, R t8 Q* H9 T
% x: D/ g9 P3 H# w: t% h5 a/ H- foreach ($list as $document) {) U9 ^; N n6 m8 Z- n& W
- print_r($document); & M% L8 Z" l9 {1 n/ ~
- }
复制代码
# y" N6 t7 Y$ }查询更多条件使用方法,参考第二节mongodb基本命令,查询3 ^& {- i! w9 f: k* u: d+ W
8 y9 c" d6 Z) ~( P
3:添加
" m/ P. s! b' V' h, B1 i, n* Q7 u# A8 d$ j
- <?php
6 y' B5 T4 @' `" y$ L9 G - ( Y" b- u) y5 S4 u+ R6 z+ D3 [
- //链接mongodb8 R; _+ ~' N* T% Q; w' q
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 W" }/ |. g% K' U) v! {& h
0 o7 h* }" z& ~ S9 C- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# a, O9 S h3 p S* ^1 K
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 I3 u# N6 }2 e, e0 y4 {$ R
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
" P S% c' |8 ? - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);' k( d3 y4 ~( i! q+ T
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
' z8 l. C9 a5 h" d4:修改. c" i) V, Y$ \$ T" y
6 n% s7 \4 ~' g7 r( ]
- <?php
- r4 n3 M5 ]2 Q* `$ ?( u - + `) I' Q, |. n' D f
- //链接mongodb1 o' N' p4 G. X& e2 W, q
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' c* X4 V; ~$ G4 t. d
) ^4 n: L' S/ `! _: F) V: S& g- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行. l! _6 |$ @) L7 B! T
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
$ E R2 V$ d: j7 Q. ~' n u% z - $bulk->update(
. }2 o+ \! Y0 H - ['user_id' => 2],
- ~) W1 i+ T5 c0 z1 K - ['$set'=>['real_name'=>'中国国']3 Z. K3 c# x' d) a# ?6 A* ?# W
- ]);
8 j* m4 r5 X& ^! [ - //$set相当于mysql的 set,这里和mysql有两个不同的地方,/ A5 Q5 j4 A( [3 f( m
- //1:字段不存在会添加一个字段;6 h( Z* P5 }* h5 [7 e
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
2 q7 e# R6 q0 r8 ` - * G; t$ p. G/ i! D9 x
1 m$ ]7 U' X, \; R- //如果条件不存在不新增加,可以通过设置upsert6 ~9 b' H/ S1 J4 R3 N
- //db.collectionName.update(query, obj, upsert, multi);: D* E' M* D2 N$ | D2 Z3 l
$ z/ {1 e7 a7 z2 v- c- $bulk->update(
T2 Q! i3 w. a4 ]+ q* Y7 f9 h& ^ - ['user_id' => 5],
, w# y' |% p% N7 x6 E. M" N - [
2 w. m( D8 A" N. q - '$set'=>['fff'=>'中国国']
# P/ f" T( z( ~ - ],
, P) x. z" f" J& z6 E - ['multi' => true, 'upsert' => false] * k% E3 i0 h& e' E
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
: F9 L6 x3 a' G - //upsert为 treu:表示不存在就新增) q# f5 U+ F( o
- );# e2 N7 F/ k- l, d1 t
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 9 Q. H4 X6 q% z( p
3 z" p* M0 l2 u& g$ Qordered 设置
4 C# V* k8 `* c% v1 A9 p* ^1 _6 V) `
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
, h/ N& ]1 [ `+ e2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 k% y% a& `! y' X- M% I# t/ ]1 Y% u, f7 {( w1 a
5:删除) G" C% X( i- G" V
4 `- J( S1 J2 R. J, P
- <?php; ~) `8 I( N/ K6 f. z, ~: n
- 3 M! s. F/ ]* N) S- `) m; k) G
- //链接mongodb
* v+ y6 m* N5 |& H o - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
* s, D$ L8 H8 q1 ?+ i2 P- ]
. [, U7 h" N3 ?, ^+ k- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
/ s) f( [1 [. V4 r& b - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. i: w0 \6 X u
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
3 I( d3 C* M* V& G. v, J - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合! }2 h. K# v6 M$ g% t
- delete还可以通过limit设置不同删除方式
% T+ m8 h% ?1 r* @* l& d% @+ @: m
2 g S- o# l. k- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
; j+ W2 W, s( P. w) h! h) O0 C9 ` - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 6 B; O3 U8 {! I, v1 ?& W' B- v
* a1 l' H4 N7 v8 Z9 I$ X
6:捕获异常
/ {7 ^# U2 O. W1 f% q, s% E' T. w8 R s/ I/ J' o5 ]
- MongoDB\Driver\Exception\AuthenticationException
5 A- o5 l' h+ _2 E - MongoDB\Driver\Exception\BulkWriteException
: f3 _9 S& i9 Z/ N - MongoDB\Driver\Exception\ConnectionException
( ? Z. m; H& G- Z- s) f - MongoDB\Driver\Exception\ConnectionTimeoutException7 `- W ]7 D H- N" N; O; d3 J
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
5 P0 o( s" `5 { |0 s3 e' f - MongoDB\Driver\Exception\ExecutionTimeoutException
1 F D) x0 I6 W' Q' h0 q9 I - MongoDB\Driver\Exception\InvalidArgumentException1 ], f3 V6 O K" u* Q+ x- }5 N
- MongoDB\Driver\Exception\LogicException/ h- \+ l% i* o4 q _
- MongoDB\Driver\Exception\RuntimeException
# ?2 n( T2 `* c9 ?: g0 X - MongoDB\Driver\Exception\SSLConnectionException: f# x$ e4 Y8 W* I
- MongoDB\Driver\Exception\UnexpectedValueException
% H% z0 a/ D7 d& {) l4 l# j - MongoDB\Driver\Exception\WriteException
复制代码
' [" q2 e% X2 S2 h
( L: R1 ~. ?" ~" O; ~' n$ g+ G- T" H8 S7 L
点击查看全部
: W+ h' C& q, }1 G
9 c" w0 M) B1 L, z7 V6 `$ R1 n
) p0 s) w( X" G+ z' g |
|