加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】

发布时间:2021-05-23 10:43:15 所属栏目:编程 来源:网络整理
导读:本篇章节讲授PHP操纵MongoDB实现增编削查成果。供各人参考研究详细如下: MongoDB的PHP驱动提供了一些焦点类来操纵MongoDB,总的来说MongoDB呼吁行中有的成果,它都可以实现,并且参数的名目基内情似。PHP7早年的版本和PHP7之后的版本对MongoDB的
副问题[/!--empirenews.page--]

本篇章节讲授PHP操纵MongoDB实现增编削查成果。分享给各人供各人参考,详细如下:

MongoDB的PHP驱动提供了一些焦点类来操纵MongoDB,总的来说MongoDB呼吁行中有的成果,它都可以实现,并且参数的名目基内情似。PHP7早年的版本和PHP7之后的版本对MongoDB的操纵有所差异,本文首要以PHP7早年版本为例讲授PHP对MongoDB的各类操纵,最后再简朴声名一下PHP7往后版本对MongoDB的操纵。

一、数据插入

mf;//选择数据库 $collection = $db->friend;//选择文档荟萃 $doc = [//界说一个文档,即一个数组 'First Name' => 'Jet','Last Name' => 'Wu','Age' => 26,'Phone' => '110','Address' => [ 'Country' => 'China','City' => 'Shen Zhen' ],'E-Mail' => [ '123456@qq.com','666666@sina.com','8888888@qq.com','77887788@qq.com' ] ]; $res = $collection->insert($doc);//向荟萃中插入一个文档 echo '
';
print_r($res);//$res['ok']=1暗示插入乐成

二、数据查询

1. 查询单个文档:

true,'fieldname2' => true)。_id字段总会返回,除非在第二个参数显式插手'_id'=>false。不配置则返回全部字段 $mongo = new MongoClient('mongodb://localhost:27017'); $db = $mongo->mf; $collection = $db->friend; $one = $collection->findOne(['First Name' => 'Jet']); echo '
';
print_r($one);//返回一个数组,查不到数据则返回NULL

2. 查询多个文档:

true,'fieldname2' => true)。_id字段总会返回,除非显式配置为false不返回。不配置则返回全部字段 $mongo = new MongoClient('mongodb://localhost:27017'); $db = $mongo->mf; $collection = $db->friend; $cursor = $collection->find(['Address.Country' => 'China']);//行使点操纵符查找数组元素 echo '
';
while($doc = $cursor->getNext()) {//轮回读取每个匹配的文档
  print_r($doc);
}

行使各类前提操纵符界说查询:

=、>、<>,用于整数字段查询 $mongo = new MongoClient('mongodb://localhost:27017'); $db = $mongo->mf; $collection = $db->friend; $cursor = $collection->find(['Age' => ['$gt' => 30]]); echo '
';
while($doc = $cursor->getNext()) {
  print_r($doc);
}
//查询某个字段的全部不一再的值
$res = $collection->distinct('Age');
//$in:匹配多个值中恣意一个
$cursor = $collection->find(['Address.Country' => ['$in' => ['China','USA']]]);
//$all:匹配多个值中全部值(用于数组字段查询)
$cursor = $collection->find(['E-Mail' => ['$all' => ['123456@qq.com','77887788@qq.com']]]);
//$or:或查询
$cursor = $collection->find(['$or' => [['First Name' => 'Jet'],['Address.Country' => 'USA']]]);
//$slice:获取数组字段中指定命目标元素,位于find()函数第二个参数中
$cursor = $collection->find(['First Name' => 'Jet'],['E-Mail' => ['$slice' => 2]]);//只返回前两个email
$cursor = $collection->find(['First Name' => 'Jet'],['E-Mail' => ['$slice' => -2]]);//只返回最后两个email
$cursor = $collection->find(['First Name' => 'Jet'],['E-Mail' => ['$slice' => [1,2]]]);//忽略第一个,返回接下来两个
//$exists:按照某个字段是否有配置值举办查询
$cursor = $collection->find(['Hobby' => ['$exists' => false]]);//查找Hobby字段未配置值的文档
//正则表达式查询
$cursor = $collection->find(['First Name' => new MongoRegex('/^Je/i')]);//查找First Name字段以Je开头的文档,忽略巨细写差别

行使MongoCursor类提供的其他函数:

sort(['Age' => 1]); //忽略前n个匹配的文档 $cursor->skip(1); //只返回前n个匹配的文档(limit()与skip()团结行使可实现数据分页成果) $cursor->limit(1); //匹配文档的总数 $cursor->count(); //指定查询索引 $cursor->hint(['Last Name' => -1]);//若索引不存在则会报错

聚积查询:对数据举办分组统计

mf; $collection = $db->friend; $res = $collection->aggregate([ '$group' => [ '_id' => '$Address.Country',//分组字段,留意要加上“$”,这里是按照数组字段某个元素值举办分组 'total' => ['$sum' => 1],//求总和,暗示每匹配一个文档总和就加1 'maxAge' => ['$max' => '$Age'],//分组中Age字段最大值 'minAge' => ['$min' => '$Age']//分组中Age字段最小值 ] ]); echo '
';
print_r($res);//返回一个数组,$ret['result']为数组,存放统计功效
//存在其余操纵的聚合查询:多个操纵之间执行先后次序取决于它们位置的先后次序
//聚合查询中的全部操纵,包罗'$group'在内,都是可选的。
$mongo = new MongoClient('mongodb://localhost:27017');
$db = $mongo->mf;
$collection = $db->friend;
$res = $collection->aggregate([
  [//过滤前提:只对切合前提的原始文档举办聚合运算,如果放在'$group'之后则是只返回切合前提的功效文档
    '$match' => ['Age' => ['$gt' => 30]]
  ],[//指定分组字段、统计字段
    '$group' => [
      '_id' => '$Address.Country','totalAge' => ['$sum' => '$Age']//计较各个分组Age字段总和
    ]
  ],//以下操纵如果放在'$group'之前则在聚合前浸染于原始文档,若放在'$group'之后则在聚合后浸染于功效文档
  ['$unwind' => '$E-Mail'],//将包括有某个数组范例字段的文档拆分成多个文档,每个文档的同名字段的值为数组中的一个值。
  ['$project' => ['myAge' => '$Age','First Name' => '$First Name']],//指定返回字段,可以对字段举办重定名,名目:返回字段名 => $原本字段名
  ['$skip' => 2],//跳过指定命量的文档
  ['$limit' => 2],//只返回指定命量的文档
  ['$sort' => ['totalAge' => 1]]//排序
]);
echo '
';
print_r($res);

三、数据修改

mf; $collection = $db->friend; $res = $collection->update(['First Name' => 'Jet'],['$inc' => ['Age' => 2]]); echo '
';
print_r($res);//$res['ok']=1暗示修改乐成,$res['nModified']暗示修改的文档数目
//$set:重置特定键的值,若字段不存在则新建字段并赋值
$res = $collection->update(['First Name' => 'Jet'],['$set' => ['Hobby' => 'pingpong']]);
//$unset:删除字段
$res = $collection->update(['First Name' => 'Jet'],['$unset' => ['Hobby' => 1]]);
//$rename:重定名字段,若字段不存在则不举办任何操纵
$res = $collection->update(['First Name' => 'Jet'],['$rename' => ['Hobby' => 'hobby','Age' => 'age']]);
//留意:假如文档中已经行使了指命名称的字段,则该字段将会被删除,然后再举办重定名操纵。
//$setOnInsert:配置了upsert为true,而且产生了插入操纵的时辰,将某个字段配置为特定的
$res = $collection->update(['First Name' => 'jet'],['$setOnInsert' => ['lang' => 'English']],['upsert' => true]);
//$push:向指定字段添加一个值(浸染于数组字段),若字段不存在会先建设字段,若字段值不是数组会报错
$res = $collection->update(['First Name' => 'Jet'],['$push' => ['E-Mail' => '123123@qq.com']]);
//$push:向指定字段添加多个值(浸染于数组字段),若字段不存在会先建设字段,若字段值不是数组会报错
$res = $collection->update(['First Name' => 'Jet'],['$pushAll' => ['E-Mail' => ['666@qq.com','8888888@qq.com']]]);
//行使$push和$each向某个字段添加多个值(浸染于数组字段),若字段不存在会先建设字段,若字段值不是数组会报错
$res = $collection->update(['First Name' => 'Jet'],['$push' => ['E-Mail' => ['$each' => ['123123@qq.com','666@qq.com']]]]);
//$addToSet:将数据添加到数组中(只在方针数组没有该数据的时辰才将数据添加到数组中)
$res = $collection->update(['First Name' => 'Jet'],['$addToSet' => ['E-Mail' => '123123@qq.com']]);
$res = $collection->update(['First Name' => 'Jet'],['$addToSet' => ['E-Mail' => ['$each' => ['123123@qq.com','666@qq.com']]]]);
//$pop:从数组中删除一个元素,-1暗示删除第一个元素,1暗示删除最后一个元素(着实负数都删除第一个元素,0或正数都删除最后一个元素)
$res = $collection->update(['First Name' => 'Jet'],['$pop' => ['E-Mail' => 1]]);
//$pull:删除数组中全部指定值
$res = $collection->update(['First Name' => 'Jet'],['$pull' => ['E-Mail' => '123123@qq.com']]);
//$pullAll:删除数组中多个元素的全部值
$res = $collection->update(['First Name' => 'Jet'],['$pullAll' => ['E-Mail' => ['123123@qq.com','666@qq.com']]]);
//save()
//参数1:但愿生涯的信息数组
//参数2:扩展选项
// fsync:若配置为true,w参数将被包围为0,数据将在更新功效返回前同步到磁盘。
// w:默以为1;若配置为0,更新操纵将不会获得确认;行使复制集时可配置为n,确保主处事器在将修改复制到n个节点后才确认该更新操纵
// j:默以为false,若配置为true,数据将在更新功效返回之前写入到日记中。
// wtimeout:默以为10000(毫秒),用于指定处事器守候吸取确认的时刻
// timeout:指定客户端必要守候处事器相应的超时时刻(毫秒)
//留意:若已存在则更新,若不存在则插入;更新时行使参数1指定的信息数组替代整个文档。
//若想更新则应该在参数1中指定_id键的值。
$mongo = new MongoClient('mongodb://localhost:27017');
$db = $mongo->mf;
$collection = $db->friend;
$doc = [//界说一个文档,即一个数组
  'First Name' => 'Jet','77887788@qq.com'
  ]
];
$res = $collection->save($doc);
echo '
';
print_r($res);//$res['ok']=1暗示操纵乐成,$res['updatedExisting']=1暗示更新,$res['upserted']=1暗示插入
//findAndModify()
//参数1:指定查询前提
//参数2:指定用于更新文档的信息
//参数3:可选,指定但愿返回的字段
//参数4:扩展选项
// sort:以特定次序对匹配文档举办排序
// remove:若配置为true,第一个匹配文档将被删除
// update:若配置为true,将在被选择的文档上执行更新操纵
// new:默以为false,若配置为true则返回更新后的文档,不然返回更新前的文档
// upsert:若配置为true,没有找到匹配文档的时辰将插入一个新的文档
$mongo = new MongoClient('mongodb://localhost:27017');
$db = $mongo->mf;
$collection = $db->friend;
$res = $collection->findAndModify(['First Name' => 'Jet'],['$push' => ['E-Mail' => '111@qq.com']]);
echo '
';
print_r($res);

四、数据删除

mf; $collection = $db->friend; $res = $collection->remove(['First Name' => 'jet']); echo '
';
print_r($res);//$res['n']暗示删除了几个文档

以上是PHP7早年版本的MongoDB操纵,下面简朴先容PHP7往后版本的操纵。

PHP7操纵要领

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读