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不支持以前的写法。
B6 V3 h3 f8 \( y2 W( C
) @. T/ P: \' ^4 ?/ s" O
下面用PHP7新的API总结一下:
' z# k2 L/ i( @0 D( p
) C( X3 V+ ]0 G: V3 n
一:CURD
% C- s6 F% H) l, ]9 o
' V% T) Z5 X8 d+ Z5 ]9 j8 d1 C7 O
1:链接
9 Y1 R+ [: ~. _
3 n/ i. i# L6 H( R$ n7 d" ]
<?php
& _ E- h l; r* h7 H4 d
//链接mongodb
2 I3 L* D0 |! `3 m0 X
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
/ R& u) B+ j! A6 ~' k
root 用户;123:密码;如果没有密码则不写
复制代码
# h+ @: K0 j5 ~3 e& c
1 P8 N. C" e( Y) M4 g1 y
2:查询
. a ]: d/ [& j
- U" Y, \' m1 e8 g$ ?
<?php
" v# K ~9 O9 U9 `+ p! h. A
3 z% X- ?6 ]4 j8 _+ g' J
//链接mongodb
- c, B9 k$ l+ D% e6 Z' x; l
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 B+ H( }- y4 J* X, ]! C
9 _6 i5 H6 y5 ]+ J
//查询
l$ Q7 \. X; b, q D: w: \
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
0 t5 O1 A0 G5 W4 D: U( U- c9 w& C
$options = [
% q& c5 ?* R1 j
'projection' => ['_id' => 0], //不输出_id字段
4 ]5 p: _$ s: }' {9 R& d5 M8 E
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
) ~/ K' l) C# ]7 r/ q
];
L7 [: m& ` k0 P% J
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
2 \/ F" l1 P# Y% j' V' m$ I
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
/ p. S; |: M% l9 `
# h8 i" R% q* r3 i
4 v+ \2 ]; B" i7 m: K2 H
foreach ($list as $document) {
+ A7 Q9 H& ~$ E! ~# B
print_r($document);
! V; H [: L a9 O: ]9 F+ E# E2 T
}
复制代码
0 I+ s9 O6 o+ j1 A" C
查询更多条件使用方法,参考第二节mongodb基本命令,查询
- M* v/ ]7 ?: k: T/ j" S
. g* K' B8 u4 {" g
3:添加
% |/ Q, C* O1 e* g
" ~9 s# ?1 Y3 ^% \) p
<?php
/ K' T- B; @' \3 }0 w- x- S; B
1 ~& o. n# U' y6 ^1 S
//链接mongodb
a# m3 A& J4 Y! X! \
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
( X& O& @5 \9 N
$ L; E7 `! U* ~
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
' s9 x$ x4 Z$ L
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
$ g; ]8 u1 g+ v4 K, V- Y9 p
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
( R4 z6 B( N" N; x q
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
5 Y+ d2 Q9 b# G4 n& L, ^
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" V% r3 B! u0 e o
4:修改
4 J: z- E: K0 N
" Z! y7 n" l* q, t% N! R8 _: K+ m# Y
<?php
$ r$ _0 [! U0 I9 r5 z& J' D
, s; O0 Q! s3 {) P# S* b
//链接mongodb
' }$ Y! K3 x9 `8 D' e1 Y; [3 o
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
; Y2 o; ?; L0 K# M6 C
0 L, X+ J) Y0 w) X2 L, j7 S8 w1 E
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
1 M5 x8 L, d( Q- \( {
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
; X; E" X; S! ]: W
$bulk->update(
" K" R% q$ G5 b( U" @
['user_id' => 2],
0 Z7 I7 o0 U1 l0 S' n5 Y- M; a
['$set'=>['real_name'=>'中国国']
6 k" h4 M* M- R2 R
]);
# g' B$ ~: R" d! _4 {
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
0 }9 Y5 g m2 a. P# A
//1:字段不存在会添加一个字段;
! R0 B* P- B9 }
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
* x; l6 h; F7 m9 b3 l0 j z" K( G
( q+ Q0 U- |6 F6 w6 J0 ~+ I
* j& a1 _" H/ y. {0 y) V3 ^+ ^* B
//如果条件不存在不新增加,可以通过设置upsert
' a8 F3 z" a; ~1 o7 Y
//db.collectionName.update(query, obj, upsert, multi);
) |# H3 f- z. [
) a! q. G4 n6 N3 M2 f0 I
$bulk->update(
8 c- B, L. z1 r' @% n9 b
['user_id' => 5],
! j; V6 K1 Z n+ F* ?, q! ?3 V8 Q
[
0 P, A; s6 q' s9 m; r
'$set'=>['fff'=>'中国国']
8 C1 H! R% _: E/ B9 e. @ H5 s
],
* ]5 u0 ]! J3 T8 ~
['multi' => true, 'upsert' => false]
% o+ k# e1 U3 g! c+ d
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
! Z- U3 ~1 T t* t7 y I/ A; }
//upsert为 treu:表示不存在就新增
, L! U+ @7 A* r" U
);
3 `0 H0 l0 Q x8 S0 {1 r
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* u) @. G) B. h1 Y7 ]
5 g/ |, |& z8 m# F% `3 w& e+ Q! w0 c
ordered 设置
/ X* G: G: y2 x1 B) I& X" ~
& U' u% \: M5 |: W3 s
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) @0 v* @: r* L0 j5 r; g1 f2 Z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
W% F4 E) a; A& {+ w9 {2 ? S
/ O2 t7 u8 X( i" U
5:删除
+ M+ |! P( m6 R
- \3 s" Z& Z" u! i
<?php
6 ], Y$ o. d3 ^( c W
2 l: F, ^* N! M# d% b/ Q1 u
//链接mongodb
* `1 d" `$ Y4 Y' M7 F+ S1 A( f, i
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" ~" }& u9 M, r8 |
2 j( } h. R: L$ x. I* H5 C# Z3 W4 X3 P
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
$ {( I6 `$ A( u [) ~8 J
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 r; a, ?3 r# a4 b
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
& ~% i# D3 ~5 E/ D% H
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
4 {. f' Q) o y/ V) P4 H/ L& B7 d
delete还可以通过limit设置不同删除方式
* k4 j0 U8 _8 c) J) w
/ d; }* J7 M& U
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
7 d, l/ T7 t( c9 |: s+ {/ H
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
. b+ E2 [5 |* b) N1 h$ Y4 B: P# E
. C; @: I% P, ?, @
6:捕获异常
H, P' {; z% F
% r3 Q$ m2 C, d
MongoDB\Driver\Exception\AuthenticationException
- N6 L% m; z* O! Z' ^, p7 j# P* S
MongoDB\Driver\Exception\BulkWriteException
) d$ ?# g7 ^- n" l: P Y/ u( R5 `
MongoDB\Driver\Exception\ConnectionException
2 i' I. w: R0 h. E# A
MongoDB\Driver\Exception\ConnectionTimeoutException
8 O2 ]3 f. ?: A# n" b* P: F( s$ X9 Z
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
7 ]( T# `; C n4 s
MongoDB\Driver\Exception\ExecutionTimeoutException
/ }4 y) @ Z& n+ W' w* i4 T& V y
MongoDB\Driver\Exception\InvalidArgumentException
$ q5 K8 @( o2 `. d
MongoDB\Driver\Exception\LogicException
, f% ~! j# y4 M I
MongoDB\Driver\Exception\RuntimeException
0 u' ~* I: e* t
MongoDB\Driver\Exception\SSLConnectionException
( g9 m% y8 o7 e: R+ W
MongoDB\Driver\Exception\UnexpectedValueException
# t V! A w! x& r. E A C- p6 ]
MongoDB\Driver\Exception\WriteException
复制代码
' r. A G) `/ I4 N" r3 x( j
1 V$ Z9 W/ X8 n" O- \& T# s
5 i5 G8 n r. M( F3 Z" d
点击查看全部
8 \# s7 a! t7 _
3 b) ]" @" I* k7 ^
* u) q s( ?, W# U8 k# F w9 w
欢迎光临 cncml手绘网 (http://www.cncml.com/)
Powered by Discuz! X3.2