管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。7 @# I/ A' m: O3 f$ z$ A( g; T
E, ~( @' N+ o) i! q
下面用PHP7新的API总结一下:
7 M# j4 C: l- O4 E. h
6 `$ M8 f) d1 e一:CURD+ G+ X. U: q0 F- E4 y. o
- c3 p1 c0 M; q! Q1:链接
$ b3 M, I/ p1 e7 x) @# @# o3 y/ A( Y0 R0 o' w; S& u/ g
- <?php
/ \4 M& B" N4 \6 f) U: V% A0 G - //链接mongodb4 T5 ]+ c% l6 y* \: {/ c; p
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ e) I7 G! v$ h$ @4 c
- root 用户;123:密码;如果没有密码则不写
复制代码 : s" m/ g: F! o f
; t+ d P% V$ ]3 [7 r# N$ q; n2 a2:查询
& }2 H# x. a" c; }% V; m9 ]% K6 M3 v, \& K7 e% z3 g3 |
- <?php$ A9 j/ g& f. |/ P( E0 E% G) Y
- 1 r. }, u# J3 k( m% M! }- H
- //链接mongodb
5 M6 o0 B- h+ ~. T' S - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& p( R2 h, o# c1 T - * u. c! Y# }- ^) Y% Y3 l
- //查询2 T5 t! r ~0 y: |
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
. N6 b' _1 ?. [" H" ^ O5 s - $options = [
% F: E& L. `2 ]. T: ^ o2 } - 'projection' => ['_id' => 0], //不输出_id字段
. `) w# ^1 a( D. ^% } - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序" N& K% f) c- ~% T+ j- u) t7 y
- ];
. v; e5 _7 ^& u$ z! K# p - $query = new MongoDB\Driver\Query($filter, $options); //查询请求5 v; X9 K* q6 v! R
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
L1 M, U1 h% X/ _& k - * z8 ^ |4 D: K" S9 J
6 e5 D3 t( O2 Y1 X3 e- foreach ($list as $document) {2 Q+ i& j& u- c, _: J
- print_r($document); , n8 ~/ _# P: X6 S
- }
复制代码 8 ^! n. |$ S V( ]8 {9 Q5 y% ?9 r/ I
查询更多条件使用方法,参考第二节mongodb基本命令,查询
# {% d0 O2 z6 e, ^( [. N$ J4 t" {6 B: F
3:添加( q) q9 y7 |2 g* |2 ?4 K
- m. N1 Y" n- D- <?php3 K& _# i0 L. k4 S2 B
- ' X$ t& V, U# H" q
- //链接mongodb& p, B5 U* k x3 U, F
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, ]9 A4 C9 A: |
- 4 y' Y( n) y6 d) i
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% M5 r/ Z+ X# [
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
/ Z4 z; G0 U5 Z1 H; T! F8 i - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
/ f* [ T/ q7 U( N5 }& T3 q - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
9 v! E4 x6 n6 ~ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 E5 L( o+ Z% y' Z1 K8 t5 e/ @6 {4:修改0 U; f8 ~ ]+ z6 M8 L: J( ~+ z
X6 `" p( O9 [+ Y0 Z. o
- <?php
J" J6 R$ e6 ^! M* x9 @ - 0 |/ J1 P6 ~$ x- n9 J
- //链接mongodb% `* N) t; j |; L0 j7 a) h+ y' n
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); P: {& p9 D2 ]8 Y }* |7 S: t
- " A0 h4 u. P& O& u- }* [7 ]
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% l3 r2 ]3 Y( D" y: L
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 I0 D% n8 |( u3 M
- $bulk->update(, L4 d; Z0 N9 R2 ]$ e! b
- ['user_id' => 2],
( B" i& L3 \, [9 ? - ['$set'=>['real_name'=>'中国国']
: g5 O/ E2 G' |; a7 G& {8 J$ q - ]);
" v7 B, s! l" O5 Q - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
) v2 ^2 l; f2 \- m# K! I& u - //1:字段不存在会添加一个字段;$ W3 a" Z2 f# ?1 A
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
( u$ j7 x3 I5 I
& X1 I0 p) U9 @3 ]& x5 T w- & w% A) X8 ~* y8 Z7 I
- //如果条件不存在不新增加,可以通过设置upsert
1 m b+ E5 C9 A X - //db.collectionName.update(query, obj, upsert, multi);) m7 a% U& m% \! X' D: D; f
2 t- ^5 L+ v# s1 b- $bulk->update(7 t1 Y9 l$ u+ Z% w: s' Z" z
- ['user_id' => 5],$ R" R: M" m P6 i3 ?9 C
- [* c2 V& m5 n" r5 h6 z/ I6 G5 |
- '$set'=>['fff'=>'中国国']* V7 w: |) a- o3 ]% o5 }
- ],
8 Z7 w1 [! ?. v; r1 ] - ['multi' => true, 'upsert' => false] : }" {* l1 l1 @4 u8 n
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
9 p3 C$ t! w5 l2 F - //upsert为 treu:表示不存在就新增
X' y" g3 Z( t5 e' n - );; d0 ^9 q3 q, j3 y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 B4 g- Z0 }) I9 T' u7 O: K5 z) ^: p# G; C+ w5 _/ F7 ~7 M/ ?4 V
ordered 设置
) S6 \3 S3 y0 j8 v/ r, T" Y1 l( V( r# c3 p6 x6 t5 c2 u* Q* ?- U
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
9 P8 {! d( L" s4 B3 K2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行: J& l( a4 _1 Z* y0 x
- J5 U8 e3 Q- z& G4 ]$ C# \7 W8 e
5:删除; `$ w7 z: Q5 F0 x
! b$ m! s3 w1 D S5 X- <?php
9 Y0 a0 @4 l- V
. R% {3 c& K( {- //链接mongodb
* a( I/ J" m' N3 V3 C* g - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! o# b) f/ l P# h$ {2 I1 Y0 W- O
4 F4 R7 k% c, @5 R; y( ?- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
0 L6 |8 {' b7 }) S- W3 f3 F - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
2 D: \8 d" ~$ k1 [# Z - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段3 u- |" o9 e, [+ N7 a
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
2 a! s @1 k3 Z - delete还可以通过limit设置不同删除方式
( P" [7 n" ?3 s0 I" }- V% N5 | - 2 d3 _ b/ t% Y3 p! t
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据) L4 U. |$ k! p1 N" Z7 V
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
* G8 z5 x% x, e7 J& Q e; Z7 \' F/ u- E/ H
6:捕获异常! l$ m/ Z/ W* }6 D* \; _$ z
2 C3 @% N9 L$ k4 M" X- MongoDB\Driver\Exception\AuthenticationException0 p1 I5 F5 d! p! `8 |
- MongoDB\Driver\Exception\BulkWriteException
' @ l0 B" Z& U* I+ Z5 F, O" M - MongoDB\Driver\Exception\ConnectionException
# o0 s( }. r3 L- D* s3 d0 s" A) S - MongoDB\Driver\Exception\ConnectionTimeoutException9 g0 Q/ w$ i) ^0 h& r g& z
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口$ M& K+ I2 w$ k* p' X4 A
- MongoDB\Driver\Exception\ExecutionTimeoutException
) _% q5 d. k5 ` - MongoDB\Driver\Exception\InvalidArgumentException4 Z- B( i: H1 h) X
- MongoDB\Driver\Exception\LogicException+ H$ p1 a: ^: A! {; N; ?
- MongoDB\Driver\Exception\RuntimeException
- s1 s. {: ^' [) N& X1 p - MongoDB\Driver\Exception\SSLConnectionException( o0 H$ o! U- K8 f, V, n
- MongoDB\Driver\Exception\UnexpectedValueException V; W/ x2 g7 P* S8 q# j
- MongoDB\Driver\Exception\WriteException
复制代码
: P9 ~8 Z* i2 L; B- ]8 m- ^: D) ]) C# N; h3 k- a
# b- v ~' j" t. I点击查看全部$ e, S/ S' @7 |. W: a/ k2 k2 G3 f
! ^# s7 o0 H7 [4 {* z9 c# Q- y; z) g& a: v4 T* m/ r
|
|