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不支持以前的写法。
0 A; m; Z& p7 y' J
4 `9 e3 X; c2 h8 M
下面用PHP7新的API总结一下:
* ~" I1 {1 s8 ^8 ]7 n
( A J, Q6 h& c
一:CURD
: B& D( z6 [. Z6 d
& S9 P9 u; X/ z8 W3 H
1:链接
/ v0 U3 M) B" v
; J) E0 h, t* w# Q# E
<?php
7 Z' Q1 C) V" P: u9 ~; Z
//链接mongodb
* v! G6 f. {) b% @% _: Q/ d1 m
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
0 W. T1 j R5 O/ G8 \
root 用户;123:密码;如果没有密码则不写
复制代码
' s# U. ?- e$ l7 y3 k# U. v
0 M& N3 t" Q8 I% o) _: M
2:查询
, w. m; p4 F9 y% p
: t) j9 ? l7 M, _* X3 p
<?php
) X. k3 `2 {' r+ O0 z i9 w
5 f8 a, f, q( G7 ~2 w& G4 [% X' g2 H
//链接mongodb
" X3 P- A& n7 J" J* ~
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 [9 a. {1 m& P# X# W; c9 G4 ]0 u' a( G
) O! x7 `% @: p% v0 _$ W. Q: U* a9 ~
//查询
5 p4 j6 ~* j- w' W7 K X4 N+ }
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
: P" A* f4 w8 y8 E
$options = [
* C7 I7 U$ ^4 S U1 `+ T
'projection' => ['_id' => 0], //不输出_id字段
2 }! Y& C- E5 b! ~
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
- s6 a. S& Y1 P
];
$ {$ g! }7 i; r. n7 R' S
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
' [7 |8 Y( b) X: q2 j
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
2 y! F) R$ }, A: T4 U1 b
* s- q6 R# g q# a8 X0 U
7 a$ r/ E1 ], Q0 O: R7 j# ~8 }8 v
foreach ($list as $document) {
" c+ B( {/ ~# X+ Q0 b) s) Y# b) W/ y
print_r($document);
3 H) q" ]; v+ q. s- }: n# z1 ^
}
复制代码
2 Z6 I% j1 G3 h, D+ w' k+ v; t
查询更多条件使用方法,参考第二节mongodb基本命令,查询
3 v! [% S3 K1 l Y2 c0 t
) g. R2 _! S! `! `. M% }
3:添加
4 O2 j, e. X2 Q) {! }8 j
2 |: q( r4 c- `2 _( x! M
<?php
$ c2 s" @- z; [+ J4 Z
9 a( w9 K4 I9 c$ u% d0 L
//链接mongodb
: a; n* K) Y# C3 u. f
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
2 f1 v- P0 n, S, u; c3 B
7 J+ ?# R: V( T) }* |. S
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
$ |# n! z' _9 T! g( G
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ c/ O4 s! Z5 ^
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
: x) @2 i D2 a+ w% ^: s/ y% A
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
6 _1 E; ~; I# S8 A8 D
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 q! o. o! j+ D+ o+ z& e
4:修改
3 U/ U2 ~4 \ c2 e
9 x0 k: `; V/ g% j$ }+ T
<?php
2 Q+ W1 e" W- [) P
) b$ h+ D- V: n4 w; x1 i+ I
//链接mongodb
! s# }. v/ r/ L' }7 y5 m
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ v0 W2 d" C3 l- s6 A" a
, n) K& Y {/ R, D9 c2 U
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
+ Z7 [7 E8 W7 K# H, W. n0 |
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
6 e, f/ D* K( s) k
$bulk->update(
& \! ? \: w* i: Z. Z
['user_id' => 2],
/ y0 x& Y! L1 H$ T0 Q
['$set'=>['real_name'=>'中国国']
5 r" j; i( ?* W+ p, N
]);
V! K( Q" L9 m9 Y+ h: l% l. r
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
% Y- z0 Z! _& w) z
//1:字段不存在会添加一个字段;
5 d& S1 f3 \$ E% J$ }
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
+ Q5 h8 e0 ^/ y4 S( ^1 x
f$ r- ]! Y$ ]. X' B
; u! v4 j. S( z0 Q& B
//如果条件不存在不新增加,可以通过设置upsert
; |4 L/ M+ d. o* n4 ]3 `% a
//db.collectionName.update(query, obj, upsert, multi);
5 o! G% T" p1 L7 H3 h _) W; B, u
% h! B _3 q" O2 g3 X8 O* L0 J* ^
$bulk->update(
- O0 a. S$ Z* Y. U* g4 y3 A
['user_id' => 5],
. `$ _% i- k, n* t/ Z: w
[
4 I8 b% i Z3 h. }2 ?
'$set'=>['fff'=>'中国国']
. c- }! ~- F$ `
],
L! N' c, H" l
['multi' => true, 'upsert' => false]
! }0 R* A" A! ?0 ^
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
/ C1 N, N! O% z( O4 {
//upsert为 treu:表示不存在就新增
. I# O3 u& p2 T- F
);
# q# W r% x8 V0 M
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
7 [- g% b6 r S# q
, G5 C7 t0 w- E9 y9 S1 ~4 p
ordered 设置
/ F3 E7 G) h" \9 f. S/ v
. c1 Z& D. |7 j- Q9 g* _
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
- A, N1 d2 M. p& {# M) [0 j- {
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
/ W' u9 v6 j7 ]% E* R2 t
, ~# j4 }; c5 F, Y6 \
5:删除
& P! s4 P% J4 G! P
6 |7 N+ o0 P' [0 R7 X% [3 M
<?php
0 R1 G4 F( b W6 h2 M0 l
9 X2 m5 r$ r( }7 B$ m* k
//链接mongodb
8 c7 ~: b `2 U: q1 i
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' i9 m4 o" N2 T
4 t' q0 _* O8 `) u0 }
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
, ]6 a' ?+ }/ n! v. \- j
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
& t4 \+ D% d' _( s4 k$ a
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
2 [) `$ K- B# Z4 ]
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
0 F, F/ e. |" {' ?/ Q3 W4 Z. d
delete还可以通过limit设置不同删除方式
! f' ]! G' e N( i( D- j, i
+ V# T) _6 w, g; ~: c
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
5 s) r5 q6 ?6 K1 C9 |& u( y J
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" ]: B1 ?2 t, ^$ {' c$ k' E9 A% l
, T! V! [2 S6 o0 _, E
6:捕获异常
6 N7 b, ?: G/ g- l, Q$ z, `
) B' y! L/ X& c; `; Q
MongoDB\Driver\Exception\AuthenticationException
l6 I$ p7 e1 {1 W/ p; _7 y1 d4 P( |
MongoDB\Driver\Exception\BulkWriteException
* D" ]2 L0 Z, L% }/ ]* x. X
MongoDB\Driver\Exception\ConnectionException
: j1 \+ v2 S/ H3 `
MongoDB\Driver\Exception\ConnectionTimeoutException
2 t! `# v; ]4 {& j
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
- S- r# G. a7 b! d
MongoDB\Driver\Exception\ExecutionTimeoutException
- I) _0 O, G3 u t# F1 ]2 `/ u
MongoDB\Driver\Exception\InvalidArgumentException
0 R" ^' ?) g; S, [! ^
MongoDB\Driver\Exception\LogicException
2 n8 w2 X$ B0 _
MongoDB\Driver\Exception\RuntimeException
6 Y3 w5 \9 r. e2 K5 C0 A
MongoDB\Driver\Exception\SSLConnectionException
" Y1 @, i4 \* @$ I) R" |* n. D2 w
MongoDB\Driver\Exception\UnexpectedValueException
- y. z7 I' W( F m# o
MongoDB\Driver\Exception\WriteException
复制代码
0 c, a8 _& q5 i h4 b0 s: I
; g g4 J( I5 D; g: G
8 d( ~ z% k3 m! B6 T
点击查看全部
$ a) h* g& l( }/ e l" [
' ^5 h6 L& U* l' V: G8 c
6 `: n2 K, F" c3 D$ f
欢迎光临 cncml手绘网 (http://cncml.com/)
Powered by Discuz! X3.2