您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14453|回复: 0
打印 上一主题 下一主题

[php学习资料] php7的mongodb基本用法

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-24 20:58:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: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不支持以前的写法。
4 D! R# r# x; {  Q. O7 w! |( }. d& z  w% g
下面用PHP7新的API总结一下:2 g' y! i6 ~' T& [, N

* Y! q3 h7 A1 I! F! A5 s, u一:CURD* m3 u9 d$ |  F3 u6 K& M9 o, s

) `! X: y4 C9 A5 R% I3 p0 K6 ]. |1:链接4 h( k' N4 r0 P4 X/ h& J4 b

4 x' b! g1 ~1 d8 q
  1. <?php
    $ D1 S2 A" |; i: N6 i( g
  2. //链接mongodb5 N' s: l1 ]5 O- M
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    - y! K) B  p. w- k- N/ u. o/ m! Q# `* l
  4. root 用户;123:密码;如果没有密码则不写
复制代码

0 h% n! t( _5 p: U! _: H* N
7 K/ V0 e8 |7 w6 X/ g4 k; ?4 G2:查询
3 Y, x: ^; \2 }
7 U. f9 {* M6 d. f: C; ~6 K
  1. <?php
    . a9 q5 T% Q* B! d  k5 {0 h; N; E; [

  2. ( p3 _& L. M+ j8 w2 i% o
  3. //链接mongodb
    $ y! d4 w" L& |" M: J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ) T8 s9 d9 L- I  J8 t

  5. 3 P6 ?/ M0 n: ?; I( \
  6. //查询1 @2 ^; t6 E$ {
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    : M9 k4 l/ X2 [7 k
  8. $options = [
    6 |: w/ q$ p8 n3 ~. F8 j% d0 d
  9.    'projection' => ['_id' => 0], //不输出_id字段+ ^' N, U, q# R' h+ i
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序# ?0 Z- P. l6 h5 I
  11. ];! b% p, S$ ~9 U8 q9 v/ `: Z
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    , U1 m9 {& ?- D6 F2 R- I
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    8 b: Z2 O. ^9 x) G9 H
  14. 1 J, R  t8 Q* H9 T

  15. % x: D/ g9 P3 H# w: t% h5 a/ H
  16. foreach ($list as $document) {) U9 ^; N  n6 m8 Z- n& W
  17.     print_r($document); & M% L8 Z" l9 {1 n/ ~
  18. }
复制代码

# y" N6 t7 Y$ }查询更多条件使用方法,参考第二节mongodb基本命令,查询3 ^& {- i! w9 f: k* u: d+ W
8 y9 c" d6 Z) ~( P
3:添加
" m/ P. s! b' V' h, B1 i, n* Q7 u# A8 d$ j
  1. <?php
    6 y' B5 T4 @' `" y$ L9 G
  2. ( Y" b- u) y5 S4 u+ R6 z+ D3 [
  3. //链接mongodb8 R; _+ ~' N* T% Q; w' q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 W" }/ |. g% K' U) v! {& h

  5. 0 o7 h* }" z& ~  S9 C
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# a, O9 S  h3 p  S* ^1 K
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 I3 u# N6 }2 e, e0 y4 {$ R
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    " P  S% c' |8 ?
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);' k( d3 y4 ~( i! q+ T
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

' z8 l. C9 a5 h" d4:修改. c" i) V, Y$ \$ T" y
6 n% s7 \4 ~' g7 r( ]
  1. <?php
    - r4 n3 M5 ]2 Q* `$ ?( u
  2. + `) I' Q, |. n' D  f
  3. //链接mongodb1 o' N' p4 G. X& e2 W, q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' c* X4 V; ~$ G4 t. d

  5. ) ^4 n: L' S/ `! _: F) V: S& g
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行. l! _6 |$ @) L7 B! T
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    $ E  R2 V$ d: j7 Q. ~' n  u% z
  8. $bulk->update(
    . }2 o+ \! Y0 H
  9.         ['user_id' => 2],
    - ~) W1 i+ T5 c0 z1 K
  10.         ['$set'=>['real_name'=>'中国国']3 Z. K3 c# x' d) a# ?6 A* ?# W
  11. ]);
    8 j* m4 r5 X& ^! [
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,/ A5 Q5 j4 A( [3 f( m
  13. //1:字段不存在会添加一个字段;6 h( Z* P5 }* h5 [7 e
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    2 q7 e# R6 q0 r8 `
  15. * G; t$ p. G/ i! D9 x

  16. 1 m$ ]7 U' X, \; R
  17. //如果条件不存在不新增加,可以通过设置upsert6 ~9 b' H/ S1 J4 R3 N
  18. //db.collectionName.update(query, obj, upsert, multi);: D* E' M* D2 N$ |  D2 Z3 l

  19. $ z/ {1 e7 a7 z2 v- c
  20. $bulk->update(
      T2 Q! i3 w. a4 ]+ q* Y7 f9 h& ^
  21.         ['user_id' => 5],
    , w# y' |% p% N7 x6 E. M" N
  22.         [
    2 w. m( D8 A" N. q
  23.                 '$set'=>['fff'=>'中国国']
    # P/ f" T( z( ~
  24.         ],
    , P) x. z" f" J& z6 E
  25.         ['multi' => true, 'upsert' => false] * k% E3 i0 h& e' E
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    : F9 L6 x3 a' G
  27.         //upsert为 treu:表示不存在就新增) q# f5 U+ F( o
  28. );# e2 N7 F/ k- l, d1 t
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 Q. H4 X6 q% z( p

3 z" p* M0 l2 u& g$ Qordered 设置
4 C# V* k8 `* c% v1 A9 p* ^1 _6 V) `
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
, h/ N& ]1 [  `+ e2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 k% y% a& `! y' X- M% I# t/ ]1 Y% u, f7 {( w1 a
5:删除) G" C% X( i- G" V
4 `- J( S1 J2 R. J, P
  1. <?php; ~) `8 I( N/ K6 f. z, ~: n
  2. 3 M! s. F/ ]* N) S- `) m; k) G
  3. //链接mongodb
    * v+ y6 m* N5 |& H  o
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * s, D$ L8 H8 q1 ?+ i2 P- ]

  5. . [, U7 h" N3 ?, ^+ k
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    / s) f( [1 [. V4 r& b
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. i: w0 \6 X  u
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    3 I( d3 C* M* V& G. v, J
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合! }2 h. K# v6 M$ g% t
  10. delete还可以通过limit设置不同删除方式
    % T+ m8 h% ?1 r* @* l& d% @+ @: m

  11. 2 g  S- o# l. k
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    ; j+ W2 W, s( P. w) h! h) O0 C9 `
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
6 B; O3 U8 {! I, v1 ?& W' B- v
* a1 l' H4 N7 v8 Z9 I$ X
6:捕获异常
/ {7 ^# U2 O. W1 f% q, s% E' T. w8 R  s/ I/ J' o5 ]
  1. MongoDB\Driver\Exception\AuthenticationException
    5 A- o5 l' h+ _2 E
  2. MongoDB\Driver\Exception\BulkWriteException
    : f3 _9 S& i9 Z/ N
  3. MongoDB\Driver\Exception\ConnectionException
    ( ?  Z. m; H& G- Z- s) f
  4. MongoDB\Driver\Exception\ConnectionTimeoutException7 `- W  ]7 D  H- N" N; O; d3 J
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    5 P0 o( s" `5 {  |0 s3 e' f
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    1 F  D) x0 I6 W' Q' h0 q9 I
  7. MongoDB\Driver\Exception\InvalidArgumentException1 ], f3 V6 O  K" u* Q+ x- }5 N
  8. MongoDB\Driver\Exception\LogicException/ h- \+ l% i* o4 q  _
  9. MongoDB\Driver\Exception\RuntimeException
    # ?2 n( T2 `* c9 ?: g0 X
  10. MongoDB\Driver\Exception\SSLConnectionException: f# x$ e4 Y8 W* I
  11. MongoDB\Driver\Exception\UnexpectedValueException
    % H% z0 a/ D7 d& {) l4 l# j
  12. MongoDB\Driver\Exception\WriteException
复制代码

' [" q2 e% X2 S2 h
( L: R1 ~. ?" ~" O; ~
游客,如果您要查看本帖隐藏内容请回复
' n$ g+ G- T" H8 S7 L
点击查看全部
: W+ h' C& q, }1 G
9 c" w0 M) B1 L, z7 V6 `$ R1 n
) p0 s) w( X" G+ z' g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 16:46 , Processed in 0.059010 second(s), 20 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!