cncml手绘网
标题:
php7的mongodb基本用法
[打印本页]
作者:
admin
时间:
2019-6-24 20:58
标题:
php7的mongodb基本用法
提示: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不支持以前的写法。
8 ?4 |! m. V9 g+ e6 S* ` v
. ~$ ?+ i7 e- R: E
下面用PHP7新的API总结一下:
* z# H' E- q) k: P9 {9 l
1 c; [1 b0 O: y$ e0 G* V' ? |
一:CURD
+ A; z* T2 F& W, D
( h+ @. W1 |4 W
1:链接
* `/ q; ^5 {5 Y
! X- Q: D; o9 h
<?php
. m; T( y. A1 V+ e6 u9 Y; m9 E; ?' A" ` _
//链接mongodb
( C! W) y; ]) y% L- u
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
; D& o; _ P2 Y5 m1 c. i
root 用户;123:密码;如果没有密码则不写
复制代码
: l5 e9 ^. ^7 h. i
) i3 p) i( `" w/ k8 ^+ I- t9 E
2:查询
2 W. O% y, h( z4 O! A" j" L: x
1 U7 E5 A; c/ P3 f. b3 J: {
<?php
) K" C3 I; Q- W% @( b# U
+ s' o$ M. \$ Z# D
//链接mongodb
2 Y4 l' U2 G( y2 N* i- q a
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, l; q" t* T: n) n8 b: ]
- g, N; v" v; @5 w: E" o
//查询
5 m$ a, w0 u3 e1 z' s
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
: j- z5 m) ^& Q3 l0 ^; K+ @# M
$options = [
' w7 f2 h& O r! K" F' _/ g3 C$ r1 F
'projection' => ['_id' => 0], //不输出_id字段
# k. a6 W$ S/ W4 _/ N3 X' `
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
7 V. {8 I+ X% j. D; g; u* D
];
, l1 w: Y+ F r, T6 {1 J' w% b
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
2 p8 j: l$ C4 M* [9 \ R: E5 i9 u
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
i, g' l H/ s. w- r4 ?
! c& q6 V! P1 D/ l' Y" D! |1 \
" z( u- q, R1 d3 }; ?. v# D, u
foreach ($list as $document) {
, [' ?4 i: s" R. W
print_r($document);
7 D; U* X' u& A- q) N1 w1 x
}
复制代码
! c4 ?3 ?4 v: k
查询更多条件使用方法,参考第二节mongodb基本命令,查询
4 j1 b: e; ?3 t' f0 B0 d" h5 M
# n! F0 _& o0 D. P6 o4 x
3:添加
9 M% \0 n- ~$ D* I$ H. a
. a) t9 K! [4 H; b! r) B* k
<?php
9 W8 T! [. u7 }. U& V; t
5 J) ?) Z" O' j `5 _
//链接mongodb
1 U w5 {8 w0 c" \2 R
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ H" ^# B5 ^8 c( X
: y2 g6 V4 J4 T7 x$ f) B
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
5 z7 J2 x1 D- S) t* Q) b
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- k+ C5 p5 c/ z) w& H- K
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
! K0 X& D7 E9 D
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
5 I( @6 t/ a% T, e m
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* t5 Q5 I# g( @+ V6 S
4:修改
- `$ p5 |+ d: x0 V: W; P! i
6 d: |# w5 A) a3 i( |0 K7 L
<?php
6 d% W5 l) Y1 n# Q. ?) ^2 n0 X& r
1 `9 o; ]" r2 H7 i, t4 w0 o) i+ s
//链接mongodb
, x. T, I7 g* m4 Y
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
5 p9 C8 _: |3 H4 Z3 _
) X6 W5 {6 G/ _0 |" t e
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
& r ?' r; W9 V% j* @; ~
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
7 \. h* L3 c; m1 R9 p+ P
$bulk->update(
! e% ]9 b7 J* G8 T2 X3 }/ D# s
['user_id' => 2],
9 G/ v9 a3 W. I. [7 ^& N
['$set'=>['real_name'=>'中国国']
. X# {( H; T. O; n) A9 {- [
]);
" B( ?$ z6 Q1 F
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
+ o- ~3 k! q- S8 i; u+ x
//1:字段不存在会添加一个字段;
) Q; ]0 }) i4 u s- {/ W
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
- Q' {2 q x2 u5 ?+ m7 @6 n
+ m0 U/ D0 ~& Q& g4 Y
4 ^5 A; o3 c" R0 G) Q
//如果条件不存在不新增加,可以通过设置upsert
9 S2 m [0 d( {! z/ {, t5 M! X
//db.collectionName.update(query, obj, upsert, multi);
$ K6 @% \+ e8 }
6 ]" k, ?4 w: @5 M& D0 B) V2 x
$bulk->update(
" o7 O( L4 S1 n7 Q
['user_id' => 5],
7 r5 r5 b0 A' L
[
/ n1 J# {! J) j6 _0 q2 e. J
'$set'=>['fff'=>'中国国']
# B4 e. p g/ G3 A; N
],
& [! _6 v1 [4 r' n( t2 U; x7 d4 p' q
['multi' => true, 'upsert' => false]
/ W2 x2 R; S( S
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
" C2 z3 v# ~+ g e' V
//upsert为 treu:表示不存在就新增
9 B& v( [# o0 F7 z0 L B8 V' u
);
5 f& Y# E$ t3 b
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: O6 L& w& X* f5 U" P' V
, k, E4 Y2 R7 V8 t+ g
ordered 设置
) q3 n" X. L. b
' j# v+ p/ M& j5 r# I; C* _% G. c- h
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
x' ~" }- V2 m- L3 O" X
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
. h8 x) |. E8 Y1 L
* w9 e( W/ _( J0 i2 Q4 T: K4 F2 d
5:删除
! X5 k3 q3 T; g% n% N' A7 v
) h8 i7 D8 h. r
<?php
' h3 N! M, `8 B6 s
" O+ o+ X- T/ a; Q1 ?9 K1 ], y
//链接mongodb
- u" o5 h! s' M6 \
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
8 |2 @$ ]( ^$ d8 `6 F+ E
, j+ }9 N7 G9 z2 m
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
+ }5 n1 |$ z- q0 u
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- _5 Y6 Y# u# U `
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
6 m; T5 A3 j( W/ y% Q/ \) s5 X7 r
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
5 F& F& e8 e: D1 h9 s
delete还可以通过limit设置不同删除方式
$ j$ X5 G. }: g% n }% }3 R9 s
5 A9 q$ s+ H ?5 M7 D/ s: w# g' r- Q
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
' _3 B1 X; v8 G. m! w; X
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
: l5 X/ a5 b, V; c
! i- | ?) R0 `8 G, h) G# Z
6:捕获异常
2 f3 D: _$ @* q# i1 P% ^+ V7 R u" m. j
- S6 l; X/ e7 C: I0 \3 \; m& w
MongoDB\Driver\Exception\AuthenticationException
* [* m" G) _5 U [
MongoDB\Driver\Exception\BulkWriteException
" K6 J# Q. ?1 a1 C2 }
MongoDB\Driver\Exception\ConnectionException
3 @+ ^& M$ g9 E j& O
MongoDB\Driver\Exception\ConnectionTimeoutException
# M" ^8 T2 A- L# y" x4 p
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
7 u4 `+ [+ B2 m; B* {: V
MongoDB\Driver\Exception\ExecutionTimeoutException
% m- r- Z! q- ?/ F3 V
MongoDB\Driver\Exception\InvalidArgumentException
% w4 _$ ` Z0 t @9 h# [. {$ f
MongoDB\Driver\Exception\LogicException
% \2 {; x: d% [$ t, f( |. D
MongoDB\Driver\Exception\RuntimeException
$ D" m# ?, H5 J0 h" K) o% O, F
MongoDB\Driver\Exception\SSLConnectionException
1 M/ Z" Y% [6 y# v* U8 s
MongoDB\Driver\Exception\UnexpectedValueException
. H+ p5 v4 P; U Z
MongoDB\Driver\Exception\WriteException
复制代码
& g4 A- J9 ]% C7 R: s# ?
6 s, x# ^. B$ [+ D
$ F2 ]6 @- i1 }
点击查看全部
) q% l d) `( N, Y1 [4 h( D
' ~* _; N: T! v0 ~
3 u; \$ x" o+ C7 W
欢迎光临 cncml手绘网 (http://bbs.cncml.com/)
Powered by Discuz! X3.2