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不支持以前的写法。
- p/ P8 @' r, J Z8 K: Z
5 k; S8 U6 b# _# ?9 {$ A# ?
下面用PHP7新的API总结一下:
) W' Z. Y# z' ~ d2 ]
5 v# Q! ^4 Z/ e7 t( u9 `/ Y4 K- H
一:CURD
' E- B$ b3 n% w& |, L
5 a: W( W8 z2 G
1:链接
/ z$ C$ n5 [- q5 Q1 u
3 V/ P8 \" N# |5 n
<?php
& @. J! a6 t$ @* T& c2 c* r" h% U
//链接mongodb
3 P- l" C/ r# R( n: L" Q' O8 M9 ?1 ~
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
+ x, W# O% ]. q* D4 A# B1 y
root 用户;123:密码;如果没有密码则不写
复制代码
/ T4 k6 G) F i) ~1 J( G
2 `8 x) V7 R, n' _* p- e* v
2:查询
* _% k: Y4 ~; M- c5 q3 }- R& P, t
" r7 A7 v" U" O8 g0 Q% e2 E8 Y
<?php
3 d0 Y9 B( J9 C* F3 I
0 ~4 P: _6 s: `# C0 v6 g- c& G
//链接mongodb
" Q. B6 t" U3 [0 ]' x1 I( Y
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ N- q# \# i6 h/ i5 H
/ R0 x) F6 H* l8 X: C
//查询
7 k2 g+ i H8 Y% R. e( f) @
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
/ [6 c# C- D) N1 [8 H# [7 _3 ~
$options = [
0 u1 w R6 y# o0 |2 Y9 C% i. m, z
'projection' => ['_id' => 0], //不输出_id字段
3 d& @7 k8 Z! i6 z2 c- w
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
6 Q' J4 Z; N" v( e% X
];
$ f2 x `$ ^: K6 q' W: g8 k
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
: `- b D6 Q7 y
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
1 z- P* s2 i; Y2 e
4 A, Y! k3 C: z5 J( G! i4 m
- W9 O+ g/ h# C& ?& k7 X
foreach ($list as $document) {
$ p# P, G* U: u, C) C* k. n
print_r($document);
. _) l* r# [% B4 _$ s6 e& R3 ?
}
复制代码
9 o. o& R. G1 z7 x+ k
查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ \/ K z; F4 R. \
9 m, ]+ t; C. U- n
3:添加
5 k- X4 ~; M1 ~" W. ~: R
) _4 R \5 S/ ^ f. d& n
<?php
X2 o7 g! d& U' ]' Z2 X& Y
, F+ E' V5 B i
//链接mongodb
, c9 @2 x& i* S7 x: A
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
+ I* V# d' [" I i
) l. W7 k8 l) K* _9 @! T5 L
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
+ n# f4 [( j$ g! @
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 p! R. X( j1 F, R6 k. H2 x
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
, U5 _& m I: x+ O& L4 ?
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
' j0 D: g) m/ @5 l) T
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 s" g+ c1 h* k% U8 N8 p6 A
4:修改
& ~* a j' i3 O5 ]" N
& ]" W5 X1 v6 ?* S3 F& ~
<?php
4 ]7 I& D% A' ^" C0 g
' N4 V! l- H9 e- I' Y% \
//链接mongodb
" {/ i/ G( C2 R$ B, {) {
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 }6 e7 z6 n# G& q
% b0 X/ l% N+ F2 |
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
9 [% L4 w$ p5 u! {7 b, ]8 {
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
, J) ?2 ? \, p4 u1 x8 q* ]
$bulk->update(
3 Q/ e' N/ w1 j }+ x
['user_id' => 2],
* R n# O6 `( B$ S8 v
['$set'=>['real_name'=>'中国国']
, p+ m% f2 h: G0 D% P! Y7 G. A) g
]);
' \* @4 Z8 S' K( O) U: }
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
2 ~. I( Q. `1 i% {3 b2 L5 j+ b
//1:字段不存在会添加一个字段;
0 `* P5 P6 ~9 g% o
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
4 Z& ]/ ?/ K0 ]1 @3 ~2 i
2 i: Q6 u8 }8 ]5 @" ?0 E+ O! M2 c
0 r5 h- N4 t3 l/ n0 N4 U& I! I
//如果条件不存在不新增加,可以通过设置upsert
1 g& t% E0 X p. ^1 \7 T
//db.collectionName.update(query, obj, upsert, multi);
. k$ [- S- @# O' H* ]8 w# E
+ C3 P' _9 y7 X, c* C/ K* E) d$ v% B
$bulk->update(
2 D( k9 r8 D/ s; n) f) s
['user_id' => 5],
7 n* `& w( P1 q5 h) J
[
7 ]6 s2 U5 \6 X6 M$ `4 e
'$set'=>['fff'=>'中国国']
* ~1 t$ l# _/ T4 ]
],
# P% H. J4 D m! y6 r
['multi' => true, 'upsert' => false]
7 R' N/ Z& Q6 B1 s
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
" j# I0 A1 v7 D- ~. F+ W, u
//upsert为 treu:表示不存在就新增
2 S" G) O0 M* |- n# G' a' G0 v- Q3 v
);
1 \+ I# M( j+ |/ a1 D$ M4 P
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# M4 f8 f: l, I5 k& e4 y
4 G0 k, V" b$ e
ordered 设置
: o5 J: o/ O% K# o4 ~: ?$ {- M8 t
4 r6 r3 l/ L( w+ ^; V2 A/ V* H
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
3 e O' ?5 S- ~
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
$ l9 n+ @# F9 S5 U' E7 H
. \' D+ o- w# b, I6 ~' |
5:删除
b* t) n# c) z! x# Q) Y
( P7 r; y, L7 C
<?php
" l( y" W1 D3 [' z" e" J* z
. i) F% Q$ W8 @9 P/ G/ S0 F
//链接mongodb
; N1 j% [/ ~2 v/ N' [
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
% j, A$ ?4 W8 E( X% c
^6 B) m, f6 b- m% W2 L- A
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
1 V7 ^: p' N* N% }4 u% b+ _ K
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
. }4 j$ A- v4 E
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
- ]5 t# }7 U& E+ z8 F+ ?
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
, ^7 j* w* S) d8 r
delete还可以通过limit设置不同删除方式
( E5 m* i. l# `/ s- p
6 x7 P: v# k6 S
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
& M6 x; X# d# `. f+ r
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
* j4 N0 l% T! W: \0 \
7 m8 }2 Y: r% T
6:捕获异常
4 c/ X$ d5 L1 r0 F- I/ _
/ @5 D0 p# _1 P5 _; z
MongoDB\Driver\Exception\AuthenticationException
1 B( u& j- R) L: _) T' o/ ?
MongoDB\Driver\Exception\BulkWriteException
& \. z! ] s' `
MongoDB\Driver\Exception\ConnectionException
+ r! P5 S3 Z) N/ D! u3 b2 h
MongoDB\Driver\Exception\ConnectionTimeoutException
3 i5 r2 D9 f' @
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
& W6 x2 Q+ e8 ~* C7 l8 O
MongoDB\Driver\Exception\ExecutionTimeoutException
& c2 ^8 [2 R- g9 P! F9 b
MongoDB\Driver\Exception\InvalidArgumentException
" s9 X& i8 s# _
MongoDB\Driver\Exception\LogicException
* l% w3 M+ U4 r
MongoDB\Driver\Exception\RuntimeException
$ }( l; k5 T6 b$ m
MongoDB\Driver\Exception\SSLConnectionException
9 {9 B' c& [0 p: x
MongoDB\Driver\Exception\UnexpectedValueException
3 Z1 g. P6 Z6 c2 G/ y% n, C, X/ [+ d
MongoDB\Driver\Exception\WriteException
复制代码
5 V R3 V' @/ l+ o9 W$ e, @
" i4 e2 i+ |' k
& @9 b. H3 ?0 J1 e5 E
点击查看全部
, k; k& F2 W2 I8 W N* z4 ]
% ]4 B# }4 I7 ?: s' o& t
6 h% D7 P' b9 n8 h0 j* ~
欢迎光临 cncml手绘网 (http://cncml.com/)
Powered by Discuz! X3.2