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不支持以前的写法。
& d4 R# k% ~9 ` |, s, ]
5 }4 h! x2 H$ f) B
下面用PHP7新的API总结一下:
0 W6 F9 p( D9 j4 f% J5 n. A9 j
7 m# m: P" @% r( r4 U
一:CURD
. S# e: |$ G3 k4 w" q
+ O/ s1 {6 Z6 F! S. c5 J% T% ^
1:链接
' h8 {4 ?& ^" S5 q
# x+ w7 C1 t' }; a
<?php
. S; P6 t- N5 `6 s7 b
//链接mongodb
# _, e, c6 x9 I5 w
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
3 r6 l: i3 y0 B% k2 o
root 用户;123:密码;如果没有密码则不写
复制代码
, D. W. }9 Q) S* n
( t; k; u y* d& Z5 V9 o+ s3 E. x
2:查询
$ s4 e, a/ U* y- i6 T
5 D% T% W9 z" J- p2 n! V7 ?7 U
<?php
; m2 n* R7 |( \1 e" C R: q
2 n1 \. D- T+ k8 a0 e" W
//链接mongodb
; g. B7 T1 P: V0 m q
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 @# A0 I( ], e2 w$ {5 R
/ p. ^# e" v Y. Z0 ]
//查询
9 h6 i3 H7 L2 W1 |" Z; {
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
% C Q! V Y2 k* W5 ?+ C f' s$ Q1 g
$options = [
0 h/ A$ e& q4 ]( M+ t: l
'projection' => ['_id' => 0], //不输出_id字段
7 l, |; V) Q. m
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
0 h0 R9 V( x+ N7 n3 \8 G3 ]. W
];
/ D: s& i. v: ~+ Q+ c% E0 @
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
1 _. m i: r* Y' T# U
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
5 |" r. @( O; }: W2 v* D+ F& M
- l" _2 o p& h- h. F
. J; n& B+ ]6 D
foreach ($list as $document) {
|5 o+ p! I% x
print_r($document);
. Z, k/ q/ [( B
}
复制代码
5 m% {; Y. x/ O3 u1 T; \
查询更多条件使用方法,参考第二节mongodb基本命令,查询
9 Q( T5 q. M& ?
: e& s' F0 g8 n
3:添加
. X5 h5 D4 m) w9 k) y
3 S) s9 e; w# I; l
<?php
9 x% x. H( r1 x( u% u5 d
. u$ {& l: }3 l
//链接mongodb
$ W9 b/ C7 @6 t7 X
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ i9 G7 {* }% o" L+ K
/ y9 R6 k: C% }7 _2 h
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
/ |; _( h# C8 {: o, D1 A
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( B# T5 S, [' L' e! M
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
9 F8 Z$ M, w' T5 r
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
5 j8 L" }/ A3 G2 P6 j b+ z
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
! d- j3 G) D' K# i$ {* B5 r
4:修改
/ G2 v. a" o) E7 E
9 D" K( x4 z8 X: i5 K8 k
<?php
" ~$ o/ D& S- \1 a
9 T, B7 a& ]: n8 }
//链接mongodb
7 e. h2 c" x! H/ a9 O. }
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
5 Z# y9 [7 }5 P- W) E6 K
5 X7 R, `7 r- g8 t
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
6 }* r+ S; v1 T8 Q# V- Q% j8 F
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 K4 ~9 n$ u3 D v+ U. K2 t/ Z
$bulk->update(
0 J7 s6 z1 u& n: `- L" k! y
['user_id' => 2],
' H0 b1 O$ y9 g7 x! s
['$set'=>['real_name'=>'中国国']
) Q1 y" w: `% J8 Y
]);
2 _! G h- h! V9 q( E" X1 s) u S
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
& h1 H1 X/ r, h3 g: H7 G9 \
//1:字段不存在会添加一个字段;
3 _/ w2 d ~6 [% e
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
8 l( ^% y% n3 Z- s
8 ~0 c' a8 K. Q7 p
3 p5 U! {0 u4 i' w
//如果条件不存在不新增加,可以通过设置upsert
" _1 z! V6 S! y, C' F- ]( x& [
//db.collectionName.update(query, obj, upsert, multi);
# d/ F7 |" z& {: A
9 b, L; c* a* r. r& n0 Q- t2 P- Y
$bulk->update(
/ V6 n: u& l( S( A9 M+ u; X
['user_id' => 5],
4 s1 D5 J5 c" ~+ u& ?( F
[
7 S; L/ Q& p+ Y7 E
'$set'=>['fff'=>'中国国']
% n; L, K# p* I! g
],
1 c3 P# T+ P7 D/ V
['multi' => true, 'upsert' => false]
) x% G; g" H8 a3 O
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
( R0 i3 R. q5 c. R( _9 k2 z1 M
//upsert为 treu:表示不存在就新增
/ j4 ~( _+ q n, S9 l$ A$ d
);
3 t2 I( y7 V( j( n( k
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- S; i, \1 f9 x, h1 N8 }8 Y
& t2 t! S! D( a. K
ordered 设置
$ D. p/ f& f! ^8 g
0 _- I g& s4 P6 l# e4 D
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) B/ b6 b; y5 v
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
" c# D- J; u) ~0 v7 e
( D8 c" K8 x* e( T3 Q
5:删除
! [: F/ v: r4 b' c( M
0 r% ~/ R, Z+ f3 C
<?php
5 ^1 j3 L" e* R- X1 d- a! K
3 S* x( X/ q% S M( v
//链接mongodb
7 D) ?& V% G- I: Q$ H& M* f
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ d" Z/ L6 T! }4 ^0 P8 M7 o
: U6 D+ ?' n; ?4 ]6 `6 y
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
8 G% G; y. w; D
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 B3 `% E8 i" C+ H+ F' |% W' R
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
) h/ o4 w0 p7 W W/ @' n
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
4 J5 W5 b0 b3 {/ X
delete还可以通过limit设置不同删除方式
" y" W4 `. K' p7 b, W7 d. L. f
2 f$ P7 C5 B' p# S% C1 l
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
3 a# H6 K1 q2 ~
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 f5 t2 K: z {+ S
3 M7 r5 q3 A8 t' J7 E5 s
6:捕获异常
' a! ^/ k; u! B. H8 F) @7 f8 \
5 O! r5 T# C9 c L3 j; W b6 }
MongoDB\Driver\Exception\AuthenticationException
6 ?1 k: W# ?+ o( E3 } a7 W. R
MongoDB\Driver\Exception\BulkWriteException
, k" b7 r* n8 u6 k
MongoDB\Driver\Exception\ConnectionException
% c/ L& J% _4 s; Q3 `
MongoDB\Driver\Exception\ConnectionTimeoutException
$ c8 i% G: b. c6 S
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
9 r2 u% ]4 q) s5 J
MongoDB\Driver\Exception\ExecutionTimeoutException
: f% L- k K6 O& ]
MongoDB\Driver\Exception\InvalidArgumentException
/ T2 Y S) e! ` U! G2 N% |' }# {
MongoDB\Driver\Exception\LogicException
/ J/ D. Z" e, s/ D- N
MongoDB\Driver\Exception\RuntimeException
6 L7 s9 C2 l Z, h2 m) [
MongoDB\Driver\Exception\SSLConnectionException
! t- I2 K/ z4 o' n c. _
MongoDB\Driver\Exception\UnexpectedValueException
$ G9 o+ H$ F1 h8 O" C
MongoDB\Driver\Exception\WriteException
复制代码
& d: m, b. e' v% l6 ~) l t4 _
! D1 c+ c+ W$ S3 D" ^
' j& M6 z+ D3 |
点击查看全部
4 T* D8 m1 k) |0 |9 m. p, M
N; Z8 P) G, N% i( H
, |+ f F9 Z) P) B$ {
欢迎光临 cncml手绘网 (http://bbs.cncml.com/)
Powered by Discuz! X3.2