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不支持以前的写法。
6 i) c I, E+ o; u
0 V9 P: q$ @* s2 J" H
下面用PHP7新的API总结一下:
: O. v; n' [2 q
/ r2 ^+ |6 |. h# h+ G3 x
一:CURD
4 P1 A9 x0 B- h! s2 r# b8 y
; [& B2 l) T! ?3 V- l+ v( C
1:链接
/ L3 B, \: I) z6 C, t$ I8 I: g* N
$ x2 W2 F+ H6 k0 y8 i
<?php
7 o7 t" i' Y0 ~% h9 Y
//链接mongodb
3 y" t$ m4 A) h- l/ T
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
3 C- h% r7 p, @4 p8 I7 R& n8 y7 V
root 用户;123:密码;如果没有密码则不写
复制代码
+ K% }0 D6 o1 O/ d3 U ?
! j1 M- C `# D2 [% |0 f
2:查询
6 c7 A, @. I" {
% j0 Q$ h. g- F6 B
<?php
$ x7 g! X7 c$ q! A
' d! ?4 E3 T" b1 Y: v
//链接mongodb
( x8 A/ ~0 G- x' \
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
2 y) Y& A7 g6 P7 y
1 _ y( [: b3 k7 \
//查询
! u7 h4 s& G% {4 E" P1 X
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
" `. k5 V& }8 Z" U
$options = [
& h8 U& M, m% z0 S6 I
'projection' => ['_id' => 0], //不输出_id字段
# t% X k* n) \' N2 C6 Z6 Q
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
3 }3 V1 O9 c+ z: Q' e; O
];
@* {/ i9 t( ?
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
" u% ]* q2 D2 S [* @# f. Q
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
9 p- x' @" Z Z1 g
U* _& b6 T* V
% F7 K' ?4 |6 F1 s9 j
foreach ($list as $document) {
( h2 O7 v3 o( U% U
print_r($document);
1 f8 c5 z- n6 p/ k
}
复制代码
+ Z( y$ L; A( d$ r
查询更多条件使用方法,参考第二节mongodb基本命令,查询
7 _8 V s5 d4 o) K% V) Z% W
+ C! c8 k( d9 M: {% t# ]# @# U
3:添加
2 K: t! ^% F+ a( a; |; \
: }# z* Y1 ?3 _; Q! J% W( y
<?php
' O+ N2 p; T9 W% e3 d& {
7 A9 n) x9 }( M6 G0 G+ R) ?6 c
//链接mongodb
* o4 y5 [. M9 e
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 h: U1 s1 I1 [ Y0 a# l. N% S
- j/ j! h0 Y/ `3 y5 A: ~
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
: u# v2 Z* p2 C. {. q: y/ T4 S. K
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( T# ~( @7 S! s! b* H4 w( |
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
' Y7 S, w# D3 j( {8 `0 n; `
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
. Q. e2 N% j. e- K/ W) P) [
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
; H% |5 f* A; B# v% @7 K* g& H
4:修改
3 a) ~' k* N, O3 V1 h# P$ F7 |2 g8 @
) J1 w; P6 h" y7 F
<?php
+ d/ C" [6 @1 j' `
6 S, ?& H7 c9 S6 q9 o
//链接mongodb
8 W5 P7 Z/ @8 |/ A* |+ F3 H$ w
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ _1 ^0 g) u/ [3 H* l- B3 ~7 W
6 C# w) y2 o( F& v" T+ `
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
( d/ `4 U4 x `' {* o5 M
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
2 Q; R0 l* Y8 C" b
$bulk->update(
! b& U# x/ d2 f( |
['user_id' => 2],
5 R, C* \% @8 M% ?: T, X
['$set'=>['real_name'=>'中国国']
6 b5 T6 v( c/ W' a" V$ |7 y
]);
: }5 D$ b/ R. r; b3 V( n; O# ^
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
4 J& m; i; M+ K$ N9 }/ I$ S
//1:字段不存在会添加一个字段;
$ h4 m/ o& l* A, Q$ U3 F
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
4 l P( f3 x) z: k" Z- I4 L
+ u/ P: k1 T1 T( M" z) h
4 f L% L5 C3 _% x7 t5 W
//如果条件不存在不新增加,可以通过设置upsert
1 \6 C% x1 f m# T$ c3 D- N. A
//db.collectionName.update(query, obj, upsert, multi);
2 f- q |$ X. b# s( m* }. c
/ R+ q: I: K4 @) z3 n
$bulk->update(
, c% J, w d1 I( k. D
['user_id' => 5],
: k9 C _3 ?2 t. l+ a6 y+ F& [8 a; h
[
+ n2 Z, [9 Z: C* A" c( ]" g
'$set'=>['fff'=>'中国国']
" |: L" P1 y- R2 Z! d
],
" q+ v/ @+ S8 O6 W
['multi' => true, 'upsert' => false]
( f% ^) x5 k4 t1 n: [' {
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
5 e' R v6 N- [' D0 C; N
//upsert为 treu:表示不存在就新增
# B% a/ W/ Y0 c" G& d% J
);
5 a3 ~6 _2 h7 j& X+ s7 S
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# z0 A4 F* h: t) J: w' K; R
. u# F) M4 e- w6 X+ r) X
ordered 设置
; m S5 a/ o) t4 Y3 H3 E
# m8 {1 @9 n2 G" C. B) x& j
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
j0 G; L" k: ?) I: u6 x! k
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
0 X V M* J! B# Q
1 }/ n9 n% y( h) J2 n
5:删除
& R/ |! \; t0 {0 h9 u' ^
5 x8 ]& Q2 w2 S
<?php
/ q, b# a7 I& B& s' j6 j: [3 ]9 n7 r
( R; q5 J, u) u d
//链接mongodb
F5 N: T! A% G3 b# [
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
+ @4 E6 ~+ ]) D/ w& J' V( ?
/ u8 F/ v7 n7 d. z/ h5 y, o C0 A
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
% E# W2 T3 {! z! B
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
5 n: ~4 I( V1 O3 H" I, S4 T
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
) v. L7 c5 k, B9 M6 e& Q2 }, d
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
k2 M$ K& |3 i2 Y: q7 I
delete还可以通过limit设置不同删除方式
+ s0 [, P) b' A
, S, {% _% a0 i+ l6 |' P
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
8 H* ], ~" l, J" B/ [$ \& e
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
$ u1 W. A8 n; \* I
7 s5 H$ I% n. l9 M% i& z
6:捕获异常
, M* V# W; f5 n7 C
3 Y& O& ^/ y/ F- T( ~
MongoDB\Driver\Exception\AuthenticationException
8 K( c: V8 |) C
MongoDB\Driver\Exception\BulkWriteException
' W) r: s! _6 s6 V
MongoDB\Driver\Exception\ConnectionException
' j! C4 g2 u. {/ S2 a2 {2 y
MongoDB\Driver\Exception\ConnectionTimeoutException
3 I' E x% ^7 @, ?9 Y% M& @+ Y
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
f. t C3 y8 N$ W; C4 n
MongoDB\Driver\Exception\ExecutionTimeoutException
. h; C) D: _% B6 E* _* N. [2 H
MongoDB\Driver\Exception\InvalidArgumentException
0 y% v( G b) ?4 |) a/ {6 o+ I2 O
MongoDB\Driver\Exception\LogicException
2 W8 O( T- K9 y7 v" F/ }
MongoDB\Driver\Exception\RuntimeException
# Q1 K$ n; a+ v& `: L4 i
MongoDB\Driver\Exception\SSLConnectionException
- T; Y% w% M$ c* o- b
MongoDB\Driver\Exception\UnexpectedValueException
4 ] r' d9 i" C6 h0 t, `2 a- F5 w+ t
MongoDB\Driver\Exception\WriteException
复制代码
- D4 v" ?2 C. e
9 z: `7 z2 [4 h
# P) [' o3 t! F6 [- f _, m
点击查看全部
- G* E& j; }* g5 f- h6 Y
! p1 X' w5 E$ D; a' L f4 |
( G, X6 P6 g, U
欢迎光临 cncml手绘网 (http://bbs.cncml.com/)
Powered by Discuz! X3.2