管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
# _' m+ @6 H# ^: y4 M P+ Y, ~5 ?7 [2 K S" y: {) S
下面用PHP7新的API总结一下:$ d9 `8 v; V1 t5 K" U7 \% s2 F
$ q. P! k8 q& T, R% \% A
一:CURD K$ d, W4 M) ~7 R2 L
0 R- c4 I0 _5 Z0 O1:链接, R3 f- x" {% f2 m0 J
9 f' M( S _' H6 }1 E+ a- <?php: w- u/ t) h# V D
- //链接mongodb! o4 ?% c, Z9 x6 L3 h8 \
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
7 o8 s `5 C* d - root 用户;123:密码;如果没有密码则不写
复制代码 / g' D% x0 N k' y, X" W# z
% B, o' s0 @- W% j
2:查询
" t8 D! F* Y+ V! q/ V; e1 v% x" q* P. Z+ P" H( z$ K
- <?php0 H% q1 z4 i$ E0 n2 a$ q& g% P
) Q* W9 ? X' ~- //链接mongodb
( V" i- k- K: ?4 H - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' h, p$ T! r p4 T - $ b8 t7 L, p; }9 |1 i# X3 z
- //查询
( [5 g5 z; m. |! C - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
9 i6 b+ J$ X2 _; O - $options = [: y8 _: P/ T: k
- 'projection' => ['_id' => 0], //不输出_id字段
8 W9 f3 H* G" m1 M$ [, m - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
0 z' |4 B0 T( R Y/ \ - ];5 a- ?" t( C, e/ \
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
% T f4 u9 w, ^7 z; _0 Y: Y9 w7 ]9 _ - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
: R7 ~* t7 K7 S) t0 \ Y
A/ ?& c$ o& q' A% F7 _& K- . C$ I4 q- w; o" Y& x0 k: @0 D/ `
- foreach ($list as $document) {
9 d+ y# w. Q+ X8 D1 O% G* s# \0 K - print_r($document);
' I; M6 e' p! Y& e, o/ C - }
复制代码
% Y0 e& [' H/ a. O2 m0 u查询更多条件使用方法,参考第二节mongodb基本命令,查询
6 q& p Z- w9 g0 h2 i
7 y' ]$ J1 J0 ~% U1 g% E3:添加7 W. U9 ^( Q7 G! ?# i/ h9 h1 z$ ]) Z4 d
0 q) J k6 ^) ^: r6 X: H/ a8 o( y- <?php( g; @* ~6 H" M
! b: c; R! d/ Q0 ^% F* [8 [; }* T- //链接mongodb
: A% C! T8 A' V" f( Q, `2 b - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 |# |! R% j( _: T
0 ^: Q& g! W g* z" J- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
5 ~# Z" i/ U( M, _& K6 m7 s - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. o1 W8 u# g: o: ~
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);3 c4 X7 J, v& {( n3 @; {
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 A- ^0 O! h+ X J5 R, F( J
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ b( V9 n" S$ ^( O6 `# E4 J4:修改. T# }# k8 q, Z" ~/ ]+ H7 G9 y5 Y# W
2 P+ j; `5 N# c# Q- `- <?php6 n+ O+ V6 [! ` B2 K+ w
2 l. @; M" I8 R6 _5 V9 d0 ?6 w/ i, w' P9 ~- //链接mongodb
9 _0 W$ X9 N0 j# e# u - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 J. T f4 p' o# I7 w5 r
# ^+ d' J& x8 m7 H {- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; ?4 o1 f" w2 B6 b' B$ a/ S1 N - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
) Y, S5 D% e# Q# D, K5 Z. R# W - $bulk->update(/ p% f8 U2 P! w6 @' ~
- ['user_id' => 2],
U) c% e! ^7 @7 W+ h1 g/ N - ['$set'=>['real_name'=>'中国国']8 R6 E$ b T; F5 Q/ e" ^; ~
- ]);
6 c& J- s- N: v. B3 Z - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
$ x' Q% x: w7 Q7 j& w - //1:字段不存在会添加一个字段;# Z+ D, x M2 {( R+ R% o# c
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
H9 _# m, X# j" p+ r
1 z& `9 o& R1 T! K6 E% u
' w7 K6 m" m: Z0 x, Z& K. T- //如果条件不存在不新增加,可以通过设置upsert. w3 `: E5 y2 b
- //db.collectionName.update(query, obj, upsert, multi);3 K& x' |0 C' D9 O2 n/ p
4 G4 _5 W/ \/ D6 ]2 v- $bulk->update(( Q4 ?3 ^& {; \
- ['user_id' => 5],
0 d4 ^6 f; K; G- l1 { - [% v; s; u! P4 P3 c
- '$set'=>['fff'=>'中国国']4 Y( \' H- @& j
- ],( z% m. J+ |' u1 U5 y0 C
- ['multi' => true, 'upsert' => false]
7 M# j" ~; d- y% v U - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& E: `. ^! i Q" ]
- //upsert为 treu:表示不存在就新增
$ r' D/ F- G2 ]% q* p2 h - );
$ [" n5 p' C' l5 d. z - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 / k( P( f9 J7 J
! G4 f+ e, r9 \. t2 d) R7 V
ordered 设置' E8 K6 \3 X C8 B
" S/ n7 G& z" j& x1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' O& z+ B1 q( M4 b w: a0 {( i
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行) ]2 S5 C3 ?4 J W% I# T6 A4 C1 U
- x$ d3 o" c' M: l7 @2 T5:删除
; v. y; t, |) ], g) `- q y- \0 _3 b7 f: z9 e5 Q8 m0 A+ }" {' ]- }
- <?php
; L2 j7 Q- r) W# j8 s0 ? - 4 e8 Q8 I0 l" B" W y$ j. o
- //链接mongodb4 T, H! o5 g- @# ^& H
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
8 Y( S" a, ]! H* j3 f - 9 a- g" a3 I- i! I, ?) M
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
' P7 Z& F" }1 a, y* M- S4 Z - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
, Q: m9 ?7 O* _2 A4 _/ ~ - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
8 O `5 M) w! I - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合- L' h, y$ r5 l, k7 F' U
- delete还可以通过limit设置不同删除方式$ D+ h" E% y' b' Q" p I. w! M8 s
- 3 Z) F$ [3 D/ C( \
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据" v, q3 e. ?0 x2 S
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 / m9 ~( b: d& P6 t, s' T" H4 _' x
. a/ _. X4 {, W9 {0 Y5 u6:捕获异常
N; R# m( ]1 _" W/ }, t/ Z. h9 b: v1 B: j. `3 `8 W! ?* t
- MongoDB\Driver\Exception\AuthenticationException
! Z" c7 i2 y* k& x9 C, ] - MongoDB\Driver\Exception\BulkWriteException$ J9 J6 U- r! f0 W
- MongoDB\Driver\Exception\ConnectionException
& t$ C+ G& D _: L/ [! l' {* n) J - MongoDB\Driver\Exception\ConnectionTimeoutException
9 Z X. p! s; O% O7 j - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
3 K8 ~! a' n! L0 W - MongoDB\Driver\Exception\ExecutionTimeoutException0 a4 ~' Y2 e3 r! L
- MongoDB\Driver\Exception\InvalidArgumentException9 x7 O7 \) k: H4 x4 c) |" A
- MongoDB\Driver\Exception\LogicException6 g1 [, l& m1 `4 \+ p( X5 e
- MongoDB\Driver\Exception\RuntimeException
, w- _' Y# E$ h - MongoDB\Driver\Exception\SSLConnectionException
( E/ {8 U; t; D! ?7 z - MongoDB\Driver\Exception\UnexpectedValueException& G! O" s9 k- {6 M
- MongoDB\Driver\Exception\WriteException
复制代码 6 Z5 M/ b1 ~7 W1 {% z2 _# o p
! `" e! r9 R0 e
- B# k3 ]; a6 i2 Z& R
点击查看全部
% F) g" g) U L( I, |) q9 I
+ J* L# M$ Y+ y# C1 Q
* h# B$ u X1 N8 @8 u$ E |
|