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不支持以前的写法。
+ L% Q) `, d$ s, H
2 u3 w+ A3 v' Y; F- ^# F
下面用PHP7新的API总结一下:
6 f; f' q8 {) t+ V. O: y" p; a- r9 J
0 w; R$ [2 j; V5 Y- Z/ Q5 }! I
一:CURD
! W1 l7 S% b, `
/ `+ b) a9 N* X& N- Q. V
1:链接
6 b) E: s& F# y
2 ]* ?8 S% D. \! v" ~
<?php
9 w3 _' b' H& [, N* o) ~6 R" R
//链接mongodb
- \. f; J M( w1 T7 B0 f' H
$manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
# ]5 D j+ y0 y7 R
root 用户;123:密码;如果没有密码则不写
复制代码
4 q0 M, L0 \7 H) ]' }
% o I/ z$ j Y9 U1 z, a
2:查询
6 |+ N3 [9 v, H9 O7 x3 R) t
" T4 H# i- k8 W2 K) ~. `
<?php
0 g( O7 n9 i H+ t9 j
. h- T% C6 Z/ i8 K& J% k y
//链接mongodb
! x9 c. i9 v& o- l
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
8 Y, s) _& |" w' R0 E8 p, c
6 I% \5 N, I; g, q1 f3 b
//查询
2 D4 C- B( D ~
$filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
5 `, ?% h3 V$ n" d; o: A, ?
$options = [
8 A. n5 Z6 E- n! I8 M4 N2 H
'projection' => ['_id' => 0], //不输出_id字段
: {' q$ g* ]3 I
'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
/ }9 q6 \" c4 a W& _) s" s3 f2 ^
];
$ }# G+ D7 g5 t4 {' j
$query = new MongoDB\Driver\Query($filter, $options); //查询请求
: K8 o' s. m$ d9 |8 r
$list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
" c4 I/ G- H4 K" k) O5 |; ^- R
: s6 T* ]7 @8 p- w
7 j: M% i% w8 H% w: a
foreach ($list as $document) {
0 I+ {/ o. i: ?! J
print_r($document);
5 r R i' Y! f" ?
}
复制代码
. E6 t7 p$ p; k$ L7 r
查询更多条件使用方法,参考第二节mongodb基本命令,查询
6 X0 p0 C' h/ U5 N8 \3 e7 ]* @
4 f1 `( x& H+ x4 [
3:添加
6 n/ e2 ^+ M/ T+ M r( l4 a0 k: B ?
5 r1 W- c- G; r0 _! x/ |5 P
<?php
1 F: o- X8 S) U( H }
! K0 ^7 x) n9 m1 B% v$ K* m- J8 H
//链接mongodb
. O( E) e# j6 q8 z: s
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# L8 p9 F' u; d7 R
- R# X! r! ]" x# Z" k/ n! j' ~' w3 R
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 o0 ~4 ?" P4 ~/ `- ^2 b3 Z
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
1 P+ M& L' |1 C
$bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
" c8 O' k: w0 z2 f: N
$bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
6 W/ y4 y1 x# Q1 n
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ h! N) H# X! H; }* m; b
4:修改
, m# B: O0 h t& ]2 j n$ V
& Z, P9 J$ R( C' K; X, ]6 |
<?php
3 g/ @+ f* x$ C7 N
5 m# p$ P4 t/ K+ x9 `
//链接mongodb
/ b W J5 Z# T9 W1 C: l, `
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ L6 x/ p. {; O
, N0 D9 k4 F- \ F; i$ o
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
7 b0 `$ H1 m9 ]' i# a% Z
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
" K7 F5 W# h' {2 ~4 S
$bulk->update(
9 ?5 j: j: t2 @6 u; g0 M
['user_id' => 2],
, E9 B" c; l- k% ?' ?2 w
['$set'=>['real_name'=>'中国国']
# { y R* [: Y: N: ]
]);
( V, N& O- R& h8 ~
//$set相当于mysql的 set,这里和mysql有两个不同的地方,
# m3 }: U" v5 @+ N+ ?# r& n
//1:字段不存在会添加一个字段;
9 ]5 j9 M8 o+ S! o
//2:mongodb默认如果条件不成立,新增加数据,相当于insert
) G! J9 \7 Q' k6 _; H
; q/ y5 { s8 ?" @
# D* k. @- c, d+ n, z! Q
//如果条件不存在不新增加,可以通过设置upsert
6 V) U6 i) Y, I1 z, \2 v9 r
//db.collectionName.update(query, obj, upsert, multi);
3 T7 }. R+ c3 R* e1 p
+ l% ]/ J+ L. G
$bulk->update(
! h( |( x/ p, T! ]8 n& k: j
['user_id' => 5],
, T: s. V2 Z% I9 ?
[
* N$ W( ?2 U. W! X( F
'$set'=>['fff'=>'中国国']
8 Y6 X' N" V0 e
],
! d0 c# W2 e- \. {) j7 x* f4 b+ M& }' F
['multi' => true, 'upsert' => false]
6 H# ^# W ]5 _- C' f" J2 ~6 C0 M2 A
//multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
( U; h, [. f3 n- @! D9 h8 q
//upsert为 treu:表示不存在就新增
; F( _; k; f! i% I# n
);
0 V* }7 ]+ @ v) \4 Z
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
' H2 V1 d3 K- d
5 }7 T4 F: s- n" s
ordered 设置
( C" k2 |* i( c: q3 C& [
d' G' b4 S- n
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
7 s; x7 t7 l+ i+ B2 ]4 I2 y4 @
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
+ L8 D0 r. Q+ z/ n7 d. `
$ j( d" S& J) v& b
5:删除
9 y) h* ^ S* h3 k4 E
9 P/ d) t$ h; e7 Q2 [# l4 S! T* G
<?php
+ U# N( g: i( c& P- R
! i/ Y! J& a; Z* x9 U) W0 C! {
//链接mongodb
5 Z# n, `2 h h0 I
$manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ B4 W9 F/ o4 h( ^( Y
# V# H- I* p- A; @( K r8 Z8 s$ Z2 z
$bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
5 M* S6 }; O/ R( @) D+ r. {; \
//$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 E R3 P/ x, T# V- m0 @) Q- R0 a0 ?
$bulk->delete(['user_id'=>5]);//删除user_id为5的字段
$ E5 N( ?) W- b2 R. k
$manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
& X- }0 |- x6 c
delete还可以通过limit设置不同删除方式
( L1 C) `' o0 w
8 C$ V- V# e" u
$bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
( H* M% ^- i/ Z8 C4 @: n
$bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 O# I. ? t# {
8 `0 O4 R# j& \* h% l0 g
6:捕获异常
$ }3 V }' U8 _" n [
) H) k# Z/ z' E d% @6 s
MongoDB\Driver\Exception\AuthenticationException
& V$ Y7 h& M1 b- E- a9 J4 \2 j* L
MongoDB\Driver\Exception\BulkWriteException
7 _* U: Z& H% e; N2 ^# r
MongoDB\Driver\Exception\ConnectionException
( [1 k# M4 s& ^2 |% F: c# o
MongoDB\Driver\Exception\ConnectionTimeoutException
# k& K$ B8 ?8 Q9 {% h$ b% V# P
MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
8 ]2 |4 K6 K8 ]; W
MongoDB\Driver\Exception\ExecutionTimeoutException
/ V$ P3 r' @, x: L
MongoDB\Driver\Exception\InvalidArgumentException
1 d, A, G ~# m, p
MongoDB\Driver\Exception\LogicException
6 A6 w3 ^( F& ^1 {
MongoDB\Driver\Exception\RuntimeException
2 X: r2 q( v5 u! v/ B" L
MongoDB\Driver\Exception\SSLConnectionException
" q/ \; G, _) G' p' u. r
MongoDB\Driver\Exception\UnexpectedValueException
- a: r4 h {; B" M, ]2 ^' G3 _) Z
MongoDB\Driver\Exception\WriteException
复制代码
3 W" R: R/ g& R) m* K
! @. S m! l* z6 z Q/ \- f
- A" H4 q" u4 w/ h
点击查看全部
: @+ a0 y& h1 Z' L+ U0 C7 g# D
3 q1 `) |1 _1 ~
. {" J Q; ?3 w9 a- e5 ~
欢迎光临 cncml手绘网 (http://bbs.cncml.com/)
Powered by Discuz! X3.2