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不支持以前的写法。
; R- f) j& X3 I6 I8 n8 N r' b# j7 _
% S) h8 u" }) _6 o' ^
下面用PHP7新的API总结一下:
1 R8 Q7 x6 O! U9 ?' _( \" `
+ ?3 Z* W `# J* x+ N4 _6 C
一:CURD
$ ?* W4 e% t6 I
* {4 H2 C( f0 J( `' U
1:链接
# D) z. O$ x' O" |. V
, b, v9 p1 l5 ~7 z! S( Q7 p \' b, q
<?php
" k, j1 G* i' R! d3 s2 O& \3 w& g
//链接mongodb
0 ?! J7 J% C- @" |' f' H" I7 M7 w3 s
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
/ f8 ^+ m0 U. a% p o; O9 u
root 用户;123:密码;如果没有密码则不写
复制代码
7 X% k. T: N3 G& Y2 j9 h0 O
" @ o. s+ {+ m( a! W/ S6 v# s5 E/ v( q
2:查询
2 i, |) P! f$ [
( C" [- p! _. T+ g
<?php
% x: @) K: L \4 ~: p% F5 N3 K
7 O4 x# h; P; L' r5 {+ t
//链接mongodb
$ a- H9 }, v4 s* i( V3 | y
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
4 p: |) s3 F6 z7 w, X4 }
- { k- k m7 f' K$ @
//查询
% F+ J6 Q5 E9 j" {2 ?+ i
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
' ^' W$ M2 _ G
$options = [
3 \: ~* D5 s$ F+ z
'projection' => ['_id' => 0], //不输出_id字段
- O2 l P( m9 t" _+ g% ^# N
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
) h) m$ t$ u$ h
];
^' q+ I* a' q* G
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
! q7 j' M5 d+ S: S
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
; m+ ?' R/ v% I* b3 \" F
8 [# Z+ w0 R! ^) s( }+ {9 \" J
% r$ \$ b# k0 I: s* y& l2 y" `
foreach ($list as $document) {
! Q+ J' {# m, v
print_r($document);
0 S9 \+ V: W+ P+ e* R* ]
}
复制代码
( w+ b. G. z. B- v
查询更多条件使用方法,参考第二节mongodb基本命令,查询
3 u! a0 O' }' e i4 _* r b
9 M' u4 u: F4 J$ }3 W$ {8 @
3:添加
! y$ r* Q6 {: M2 H8 S7 x
2 i) C* n, z C7 S% P8 [
<?php
( @: W$ q I5 n- P" U7 m; Y7 {
l! B; R, A3 g1 X5 ] Y2 M* q
//链接mongodb
% K2 g' ]! I! R9 N/ \: s2 q- n# o
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 P0 @. o9 Y$ F* f6 _/ n* Y5 c
. V0 p" u. I3 T4 _1 |$ P
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
& |2 Q0 [* ~3 ?: j
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
; V1 m3 ~! D6 d* u% X
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
3 n1 U. E8 {& ^; { S1 b% v4 c0 i
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
6 m" a: \- `4 V4 x6 T
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* L3 Y3 r( _, {+ m; C
4:修改
/ `- H& ~8 [8 C9 f7 G0 X
+ `- P+ V) v# H# M) \
<?php
1 g$ O0 Q. Z4 T6 I* d
% `$ J$ k% ?% p" G) ~* I" T+ }
//链接mongodb
8 b8 `. k% L+ t# M
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& Y" B$ W# X+ X8 Y) Q
. n% ]+ I9 ~, k+ }0 ]3 ]: y
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
7 x+ |1 @' ]' ^; r+ ?, q5 q+ P$ p
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
Y5 O }0 l5 i, c4 b
$bulk->update(
9 p3 }/ H9 E4 V2 `1 K: H% I6 G
['user_id' => 2],
: G7 x, {; k: k2 R
['$set'=>['real_name'=>'中国国']
3 d+ z" D/ j& \. v4 d
]);
$ s# o5 y* p- n$ ?1 i
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
a$ R8 ?3 V9 C! c3 G1 {2 n
//1:字段不存在会添加一个字段;
7 r' M' u+ f( P) u; v! `
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
* W3 g b+ R4 v
( B1 I- {* r I# S: o
4 q/ C& s- K# O4 j0 Z
//如果条件不存在不新增加,可以通过设置upsert
5 ~1 w; X1 Y c7 ?" i# u. n& x' A. O
//db.collectionName.update(query, obj, upsert, multi);
3 l6 N( T. S2 y" p
3 e- r3 ^/ ~; w1 i4 ^0 Y, P: B
$bulk->update(
6 X& L. Q- O+ A
['user_id' => 5],
8 h, d$ B+ ?( I
[
: G q! F4 c5 `; q! w9 u1 u$ ^. L9 b
'$set'=>['fff'=>'中国国']
% U4 E- @! g4 j. l$ w# ?9 h
],
9 Z3 |% ~" H' ^1 |) }5 {; y! q
['multi' => true, 'upsert' => false]
; k% Q8 |! J0 Y" ^' \) f+ K
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
1 G/ p: I# ]4 ^
//upsert为 treu:表示不存在就新增
( ~2 L. k" j+ O& K
);
. b S; @9 \+ c4 {) G H
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
1 @! T$ k* m- |! d8 a
6 | X9 O) `" E
ordered 设置
8 d9 I' f3 F% B# _/ m
( L: t6 X) q R9 ^3 x" D! `
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
# ^6 B# L1 i9 v" ?1 l9 u8 `. W. K
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
3 m3 U3 p( @3 _4 |4 v7 C" } b4 K
$ ?% R: R4 Q; z9 P- j3 e5 n% V
5:删除
: Y! o: [9 v; }# j7 p
/ }3 C1 t8 [. w/ L! C- k
<?php
9 w7 t# i+ j6 E4 o
7 N* `& f; B6 e! U& R5 q6 X
//链接mongodb
9 f7 L K3 K0 [& a& H4 s7 m2 W: r
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 J5 ~6 q" ], \2 O, b
) S- z* k6 m- S# ?9 f& Z7 |# ]* ?
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
: C6 U0 @9 [: r, m: C6 {1 \
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 H& E% t/ ? u" q; T7 K. T3 U) c
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
^: c, C* b/ _% y1 Y1 F1 N+ l; E: j z1 N
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
$ V3 u* f9 A$ W) B0 \8 D j
delete还可以通过limit设置不同删除方式
% G3 a D% L, u2 }: U, E
. h1 W1 {0 J6 {
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
+ J' |3 Y* t u2 j& @8 P
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
( g0 J6 g5 |/ N; i7 A( F2 v8 d. q
$ G" F5 }; e/ {
6:捕获异常
. p, I* N! I. [7 Z
- A; Q9 U3 V) ]; A
MongoDB\Driver\Exception\AuthenticationException
& \1 b6 K$ }4 m
MongoDB\Driver\Exception\BulkWriteException
& o) h) W9 v X: P4 E6 x
MongoDB\Driver\Exception\ConnectionException
! h. ]$ X; T% b5 }# `! Z* e z
MongoDB\Driver\Exception\ConnectionTimeoutException
: a$ l; X) Q; A, i. [5 ~
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
1 j0 V9 w9 ^9 Z8 j6 A
MongoDB\Driver\Exception\ExecutionTimeoutException
# u5 h6 C( |# s8 {
MongoDB\Driver\Exception\InvalidArgumentException
) M3 `3 z' q v& @& U/ @5 J
MongoDB\Driver\Exception\LogicException
/ b1 M4 v8 Z7 S7 `8 i# j
MongoDB\Driver\Exception\RuntimeException
; h7 X2 D' r9 C" l- D+ x
MongoDB\Driver\Exception\SSLConnectionException
, f/ I/ Z; X1 ?/ T2 O, D
MongoDB\Driver\Exception\UnexpectedValueException
" X5 G% \# W6 W+ ~5 k% m
MongoDB\Driver\Exception\WriteException
复制代码
7 K/ \) O" v2 s0 h$ K
% Z; N4 R" c9 ]3 d/ A
- w8 h3 H! ^. Z2 g
点击查看全部
) r& \, u% j" G: C
* G& Y5 v6 q" g" P6 Z* L9 @
- c3 x& r( {0 p+ Z
欢迎光临 cncml手绘网 (http://bbs.cncml.com/)
Powered by Discuz! X3.2