管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。0 D" a, `+ H7 P' x$ J E
; ^ M7 r: Q8 U3 B下面用PHP7新的API总结一下:
6 R/ }+ m2 [: n1 ?# r! ~
' e3 X) g: W$ f% n/ J一:CURD
2 b3 i$ w5 `1 h1 P! a. P) w e; j9 X1 n
1:链接
- s! A! b3 D t+ n9 G: p4 l4 i1 Z5 n! O2 P* q7 e [
- <?php
# V9 G. b( I% F: k - //链接mongodb( K, Q8 E3 V3 m5 ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
k3 q" k4 v7 x$ X% i' e+ B1 W - root 用户;123:密码;如果没有密码则不写
复制代码
( h) W l1 ^3 \ X+ h" P* J5 N* U, K6 Z4 Z
2:查询' Q2 w5 P9 J! u' C4 _
* k, f7 ]3 j" q: j- e1 D# @
- <?php8 s& [1 F9 m; P5 T7 N. j; Q) Q4 l2 {
- ! e7 `4 m( y$ \; c- \
- //链接mongodb
) F" ]* w {2 w7 H - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& R* D! H- f8 M! M4 G" O - 0 r6 _/ v7 I) g% Q0 S
- //查询
9 `2 M4 ]' z1 L' q& d - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
3 b. y- o$ k% t9 \ r - $options = [
) q9 b+ a/ k' m! g - 'projection' => ['_id' => 0], //不输出_id字段
, Q. c; P0 T% ~ J0 l - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序6 i- b8 B% Z c
- ];7 a# @+ J# _8 ^8 M, @& H
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
2 N8 M( a* m7 L& t, I$ b' r5 M1 q7 }) b - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
* S0 I5 L0 S- Z$ Q1 P- P- N. g5 v
% O' C- \$ O3 i* k# I8 G- ! D6 M8 p D4 E" B& ]) R
- foreach ($list as $document) {
& ]3 d% F1 f: ]: W+ p `) m - print_r($document);
/ P+ `: ~2 o/ }! C - }
复制代码
! \! V5 {; K8 B* h' x8 f查询更多条件使用方法,参考第二节mongodb基本命令,查询
; M% N$ _4 Y" I+ Z7 N! e N6 D# w& s" L/ e# S0 w: i
3:添加$ t$ F! V; b5 u- V
9 d6 @+ Q) P" T* A
- <?php
5 s) V' J/ p' x3 z* J5 v5 R - ! u( V' J, r% Q4 @
- //链接mongodb6 j4 y( k9 x. ^! A4 ?& q. [$ s( \
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' ]7 _0 C! z; z3 y, G' K' T# S
; e2 M9 l8 ?0 a) [7 B& f( O- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ c3 T; c N- M3 `6 k8 d/ p
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ W# J: `2 J; q C7 ~, d/ u
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]); C: v/ z/ X1 v, E9 ?
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
+ [" R g/ x( e5 o. C& s/ ~3 ?) i - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 m. ]" n- m4 U5 u8 `- V2 [
4:修改- f4 G% e6 _% O* y3 S- z
+ b1 ~4 @ h# O) s" X+ x- <?php [, c, B/ ?( @* s0 k) t
" ^0 r h' U6 D- //链接mongodb
* P/ U" U! c: {# i/ H - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 i' G% o9 i' _
; _' w5 b$ c* }5 @# E& q% k/ y- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
, p9 n3 L f# |5 d0 ? - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
5 ]/ D! s7 F+ Z D3 K! T - $bulk->update(0 i; m6 v8 p0 @# C9 ?
- ['user_id' => 2],
' l" N6 g) \* {- i4 T' a - ['$set'=>['real_name'=>'中国国']# D; A( `+ {- H5 K& \% @
- ]); 2 d6 L; f1 q1 x- P* f+ L9 p
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
8 t( z+ j% v( a0 T7 t/ y* o3 c - //1:字段不存在会添加一个字段;
: X6 D" T7 z1 X8 f# N) T - //2:mongodb默认如果条件不成立,新增加数据,相当于insert. Q, x& s; j3 U! Y2 F! r' M
! {; A2 D& D; n/ G8 S C- * R6 T6 K. R, W, q8 X7 d
- //如果条件不存在不新增加,可以通过设置upsert
# \, [ Z- b( j: l - //db.collectionName.update(query, obj, upsert, multi);9 f6 m0 z0 s9 f0 p; K# ^
( b+ e# N6 x: s6 f/ Y- $bulk->update(
$ C! c% g0 a, y* I$ w- y! C7 m - ['user_id' => 5],& @0 S _. f K; J V |0 ~, j
- [
) y7 {& S: X/ \! Y& J4 O* T - '$set'=>['fff'=>'中国国'] D) T" J/ {8 h4 k
- ],
. e% ~9 m( \5 I9 } - ['multi' => true, 'upsert' => false]
% c; k& D E% j0 `( ]- `8 G9 d - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条' W. E; F, g6 Y; N1 e( V8 b
- //upsert为 treu:表示不存在就新增3 s& Z5 I! F' i& Z/ B- a% a
- );- P1 s. X9 b' E; b$ @/ [
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, [/ ]7 A0 r8 }0 ~- N
6 d$ q3 P0 U9 ~, S0 n% c) X' c- I, O$ Nordered 设置3 T8 X6 a8 B% w; z8 b( m/ R6 h. V" K
' _2 P' i- |2 u3 X1 W: K8 }1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
: n$ ^2 _) ^4 h6 U, G" u8 i8 a' |2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
, Y7 _4 a# p# K: Q( w, L3 s
2 R, ?& H5 z% e1 R. Z c. z5:删除
k" [9 S; f6 G! Q2 N) }% U. j, Z$ @, g# _; [( U
- <?php/ h- z# L7 E3 v! G2 H
) @5 F' K; F. f. W7 ]9 g& R- //链接mongodb! e4 q1 A' } c% y- H* A4 A
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
0 ^5 A+ _4 c+ z2 Q+ r! R
* T* h) p# |. I' n7 R1 D' c, ?/ W& m- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 F* x. V) T0 O; c) w2 P
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
* \! v& f4 x$ s5 _. A; | - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段 }1 {3 T3 ~+ i; ?0 E
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
! t7 R3 q# J9 u9 O* i - delete还可以通过limit设置不同删除方式$ b0 \+ K. |5 E
- ! f9 J$ ~' }1 x
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据+ C9 h' ~9 e- |" p
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 % |0 ], [1 e2 X- J
3 N9 H3 T) V4 {4 ?& S
6:捕获异常% [3 E7 P6 g- _5 \9 N# ]- E
# ^9 `2 O5 S# F) Q5 h4 s7 L- MongoDB\Driver\Exception\AuthenticationException6 B0 F, a$ {; L- t, c* ]! M
- MongoDB\Driver\Exception\BulkWriteException
( m/ U# j+ ]' M# W - MongoDB\Driver\Exception\ConnectionException! o3 F0 ~+ K" X
- MongoDB\Driver\Exception\ConnectionTimeoutException
: r+ l4 X$ Z. k5 X$ H) o3 ` - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口! Q4 A* X+ P8 D6 b5 L
- MongoDB\Driver\Exception\ExecutionTimeoutException
; d* n' n- L" V8 x8 n - MongoDB\Driver\Exception\InvalidArgumentException! \1 a7 m& X$ F- T
- MongoDB\Driver\Exception\LogicException
1 T) m0 @1 v* \6 G* \. q1 F2 t - MongoDB\Driver\Exception\RuntimeException6 N0 ?& s6 n/ X; L& ~- k$ a
- MongoDB\Driver\Exception\SSLConnectionException
, x/ I7 _. z( ~; L/ O5 W8 o* P - MongoDB\Driver\Exception\UnexpectedValueException, b, _( \9 D( Z" q1 X' T. u
- MongoDB\Driver\Exception\WriteException
复制代码 & j9 K5 c+ |1 i' h2 V9 p& }9 q
8 t6 h. ]/ |9 u. @& C& \! s
2 W; ` Y6 p4 ^' @! F9 g2 _点击查看全部
* ^; q3 t; |0 K$ `) E) A+ R8 y% O
0 C! M; c5 K! v6 F* @& C
% j" M+ P% j) m/ [8 T |
|