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不支持以前的写法。
9 V7 Z0 C# w7 ~3 s- E6 q
# K+ G7 P6 ?8 j3 {% }
下面用PHP7新的API总结一下:
6 m* ^( d" |3 i3 e! t6 S3 {
$ K8 x* v2 b4 U
一:CURD
D& F, t0 P( e5 w9 ]/ H$ O+ b5 b ~
7 Y# d( R8 w/ G# Z$ u
1:链接
8 `1 y" g4 m- n/ N" I( E
0 R9 A2 l/ }; B- s* }
<?php
* a0 o' m9 F2 W
//链接mongodb
$ K$ h" f- |" K/ b
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
2 _7 b7 T5 ~0 U" p0 D
root 用户;123:密码;如果没有密码则不写
复制代码
7 y* u) O1 ] F- p2 x0 A
# w1 c2 C" t6 m* _, U
2:查询
' Z# G3 B/ z, |4 v+ G7 h
+ s* H9 b$ U' \0 |" f
<?php
6 i0 g7 g* J8 _
B8 x# a8 `( G' \: Y0 G
//链接mongodb
0 k7 L& a m0 V0 ^& T) j
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! O8 V: ~( {8 b7 w$ ]
0 v+ ?; T5 D0 Z$ ^1 x
//查询
! {6 t) `/ c8 V' s7 s5 M9 h
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
. a4 f+ C6 P9 _ Q1 _8 F4 p
$options = [
5 Y+ p7 O$ Z0 P0 x: D$ i
'projection' => ['_id' => 0], //不输出_id字段
; _3 J0 c4 c. d _9 w6 f
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
0 L: w) }, K9 \+ I3 L
];
7 h+ ~+ ?$ B: u
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
, A, F5 F) {' V6 c
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
( w, W, \! X9 \' c% D3 w) k9 u* W
' K5 i% c8 w- e0 F E, [: N
0 H" n" o; H6 Q/ I6 i, R
foreach ($list as $document) {
- ?) B% h" J. j# ~5 ?6 O
print_r($document);
1 E1 t7 I; ]' V4 L3 s( g
}
复制代码
, R* m9 L) x9 m L; ?+ x
查询更多条件使用方法,参考第二节mongodb基本命令,查询
5 W/ K6 D8 _, w/ a+ w& o; U5 _
6 h6 P+ @0 p& @
3:添加
6 B( h* T) f Y( k% ?7 S) a
8 G/ z8 T/ L" J% y3 G4 p! Q1 m- G h
<?php
7 J2 W( o$ k8 ~- {+ l% J: i# b
6 T. W% ~1 _% c" T
//链接mongodb
' i0 |6 s' k$ P7 s
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
+ z) q4 ^9 A+ K+ y8 w
) L2 b6 I; `5 `0 n
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
% H+ t3 w- W) ]" z) J+ C
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
3 |: w2 N+ j( z) g+ I
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
4 b8 N1 J* C! Y- a
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
4 |& i* N( x# B& S( a* S
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ r7 Y& P' N& O
4:修改
- `/ H0 S( O% `. Y
! N2 L1 I& l- q- y+ I4 o2 Z
<?php
- Q" `$ Z2 P" t# n, k
$ f7 h2 \4 l: ?2 M* g
//链接mongodb
8 B2 d) o, ?+ P* v) I
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 e% e/ ]. \. Q9 ?. Z# J! U
2 G! E0 X3 E. u q# Y( ^9 `
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
( j2 [5 O+ t" b& m+ c: {1 h
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
2 Z# `+ Q$ r) O P' j
$bulk->update(
: }( w- D! \9 x2 v4 W, o/ X
['user_id' => 2],
! B b1 x. l: Q4 z( G% {1 f1 q
['$set'=>['real_name'=>'中国国']
; G/ w# ?- l+ t, I# h
]);
; j) o- q: C+ l" y: ^+ q5 B2 [: O
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
- U: _! z. n4 r8 \
//1:字段不存在会添加一个字段;
4 O. O) t' {; }, n+ I" w& g
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
9 X& l$ P/ c9 v$ k0 K. g; H
( e- J9 F/ w5 @" l2 U4 J: B n3 Q
( V& w0 [( e# ]! O6 R; `% {' | L
//如果条件不存在不新增加,可以通过设置upsert
) V; H. y7 n4 u! n6 O& R/ w
//db.collectionName.update(query, obj, upsert, multi);
K/ K3 p! l5 @; C9 ?
( @ S" y; W3 B/ g3 v
$bulk->update(
2 f4 z1 h& E7 n& o6 z/ P J8 W# o( E
['user_id' => 5],
% { {! c# ~5 C- a/ [
[
9 V+ y6 O2 B, z# m* L0 D) M/ O
'$set'=>['fff'=>'中国国']
/ D: N& j$ S% Y9 b
],
q" Z/ d) |2 P' e
['multi' => true, 'upsert' => false]
; b1 [% v" e d, |& ~$ R
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
& U D; s" h7 P" e
//upsert为 treu:表示不存在就新增
% |0 O$ P8 }- ]$ Y
);
. j0 @6 ?" Y' c6 R1 v# k
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 O) ^% V2 a5 y" D7 M# T
& I; H4 L {3 @3 t
ordered 设置
# ]" C% H" {4 T* ^
4 y' D4 {- k/ v9 B. s
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
; ~" W# s) y1 s6 y4 U0 d) \. o% B
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
: L4 _# T# ]5 `7 z9 I
. d5 K2 i* a+ C/ C" V3 X, d7 ?
5:删除
& c- e7 Y9 Q B" H/ E
% x1 `0 J v) [1 P6 S& j' }+ Q
<?php
9 q7 j7 V) j3 X
; h$ p ~5 j& E P3 Z. t3 `
//链接mongodb
- `$ V+ W& n( o* b9 ^# W
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
: t4 w( ^) L8 D# C$ ` j
" }5 r9 @8 R, ]
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
L$ q) a9 i# D
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
& o' X% K0 S0 |& F: i
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
! ~; w( [0 C. O( h2 U
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
+ C+ b- X) B7 j0 s
delete还可以通过limit设置不同删除方式
\4 G# C, `# e- C
1 l: J; w$ |% w1 @
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
9 X8 F( ?5 L; |5 b8 X0 r0 e* b: \5 Y+ Y
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
, A/ u w, u" S7 n3 P9 r
6 j8 G2 F% Y# I' @6 U$ c; p7 ]; K- A
6:捕获异常
9 d/ w, x" e3 y9 l: @
+ J4 e5 ?: y" U+ r
MongoDB\Driver\Exception\AuthenticationException
) i9 B) f9 t+ k; p
MongoDB\Driver\Exception\BulkWriteException
" @. \# B( h' ^+ u, ^
MongoDB\Driver\Exception\ConnectionException
9 G# x2 H$ j. T* u
MongoDB\Driver\Exception\ConnectionTimeoutException
' t: L* ~ I( _& H$ j! V# E, f
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
9 T3 I9 K8 ?4 _, p8 L! h* m
MongoDB\Driver\Exception\ExecutionTimeoutException
0 ~5 x8 I) c: U! A2 X$ a
MongoDB\Driver\Exception\InvalidArgumentException
: s5 a. P& p% [3 m% }; j
MongoDB\Driver\Exception\LogicException
6 Z; J) I2 D6 R0 U$ ~* j* `
MongoDB\Driver\Exception\RuntimeException
" _/ ^ d5 i& S. R4 v7 v
MongoDB\Driver\Exception\SSLConnectionException
/ b+ `) G- C4 U
MongoDB\Driver\Exception\UnexpectedValueException
6 L4 N; W, J3 |; i0 w n' y9 G" v
MongoDB\Driver\Exception\WriteException
复制代码
- \# O" c3 y# Y5 K- V7 ]9 O
. v( R E* F% B; X, U; R
* o: w5 y5 [" b/ k. r- U. r7 [- ~' _
点击查看全部
3 S. w) K! M) O3 [4 b1 H# ~3 \
- z d, L- l9 ~) l7 N
7 X E" z3 k" r0 j
欢迎光临 cncml手绘网 (http://www.cncml.com/)
Powered by Discuz! X3.2