PHP操作MongoDB配置与学习笔记.doc_第1页
PHP操作MongoDB配置与学习笔记.doc_第2页
PHP操作MongoDB配置与学习笔记.doc_第3页
PHP操作MongoDB配置与学习笔记.doc_第4页
PHP操作MongoDB配置与学习笔记.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP操作MongoDB配置与学习笔记PHP操作MongoDB配置与学习笔记有需要的朋友可参考参考。Mongo主要解决的是海量数据的访问效率问题,根据官方的文档,当数据量达到50GB以上的时候,Mongo的数据库访问速度是MySQL的 10倍以上2,安装(windows only)到官网下载对应的包解压到d:mongodb创建d:mongodbdata放置数据文件3,运行mongodbd:mongodbbin下有一些可执行文件,其中mongod.exe是服务器端,mongo.exe是客户端。运行cmd,输入d:mongodbbinmongod.exe -dbpath d:mongodbdata服务器成功启动4,让php支持MongoDB下载php_mongo.dll,注意版本,php5.3.x应该支持v9的(有些老资料让apache的下v6,其实要看看phpinfo后下载对应的版本);修改php.ini,增加 extension = php_mongo.dll;重启apache.代码如下复制代码(mongodb:/用户名:密码地址:端口/默认指定数据库,参数)$conn = new Mongo();/可以简写为/$conn=new Mongo(); #连接本地主机,默认端口./$conn=new Mongo(9); #连接远程主机/$conn=new Mongo(xiaocai.loc:10086); #连接指定端口远程主机/$conn=new Mongo(xiaocai.loc,array(replicaSet=true); #负载均衡/$conn=new Mongo(xiaocai.loc,array(persist=t); #持久连接/$conn=new Mongo(mongodb:/sa:123localhost); #带用户名密码/$conn=new Mongo(mongodb:/localhost:27017,localhost:27018); #连接多个服务器/$conn=new Mongo(mongodb:/tmp/mongo-27017.sock); #域套接字/$conn=new Mongo(mongodb:/admin_miss:misslocalhost:27017/test,array(persist=p,replicaSet=true); #完整/*/* 选择数据库与表/*$db=$conn-mydb; #选择mydb数据库/$db=$conn-selectDB(mydb); #第二种写法$collection=$db-column; #选择集合(选择表)/$collection=$db-selectCollection(column); #第二种写法/$collection=$conn-mydb-column; #更简洁的写法/注意:/ 1.数据库和集合不需要事先创建,若它们不存在则会自动创建它们./ 2.注意错别字,你可能会无意间的创建一个新的数据库(与原先的数据库混乱)./*/* 插入文档/*/*向集合中插入数据,返回bool判断是否插入成功. */$array=array(column_name=col.rand(100,999),column_exp=xiaocai);$result=$collection-insert($array); #简单插入echo 新记录ID:.$array_id; #MongoDB会返回一个记录标识var_dump($result); #返回:bool(true)#插入结果: _id : ObjectId(4d63552ad549a02c01000009), column_name : col770, column_exp : xiaocai #_id为主键字段,在插入是MongoDB自动添加./*向集合中安全插入数据,返回插入状态(数组). */$array=array(column_name=col.rand(100,999),column_exp=xiaocai2);$result=$collection-insert($array,true); #用于等待MongoDB完成操作,以便确定是否成功.(当有大量记录插入时使用该参数会比较有用)echo 新记录ID:.$array_id; #MongoDB会返回一个记录标识var_dump($result); #返回:array(3) err= NULL n= int(0) ok= float(1) /*插入的完整语法 */# insert(array $data,array(safe=false,fsync=false,timeout=10000)# 参数说明:safe:默认false,是否安全写入;fsync:默认false,是否强制插入到同步到磁盘;timeout:超时时间(毫秒)/*以下两次插入的为同一条记录(相同的_id),因为它们的值相同*/$collection-insert(array(column_name=xiaocai);$collection-insert(array(column_name=xiaocai);#避免方法,安全插入$collection-insert(array(column_name=xiaocai),true);try $collection-insert(array(column_name=xiaocai),true);catch(MongoCursorException $e) echo Cant save the same person twice!n;/详细资料:/manual/zh/mongocollection.insert.php/*/* 更新文档/*/* 修改更新 */$where=array(column_name=col123);$newdata=array(column_exp=GGGGGGG,column_fid=444);$result=$collection-update($where,array($set=$newdata); #$set:让某节点等于给定值/* 原数据* _id:ObjectId(4d635ba2d549a02801000003),column_name:col123,column_exp:xiaocai* 被替换成了* _id:ObjectId(4d635ba2d549a02801000003),column_name:col123,column_exp:GGGGGGG,column_fid:444*/* 替换更新 */$where=array(column_name=col709);$newdata=array(column_exp=HHHHHHHHH,column_fid=123);$result=$collection-update($where,$newdata);/* 原数据* _id:ObjectId(4d635ba2d549a02801000003),column_name:col709,column_exp:xiaocai* 被替换成了* _id:ObjectId(4d635ba2d549a02801000003),column_exp:HHHHHHHHH,column_fid:123*/* 批量更新 */$where=array(column_name=col);$newdata=array(column_exp=multiple,91u=684435);$result=$collection-update($where,array($set=$newdata),array(multiple=true);/* 所有column_name=col都被修改*/* 自动累加 */$where=array(91u=684435);$newdata=array(column_exp=edit);$result=$collection-update($where,array($set=$newdata,$inc=array(91u=-5);/* 更新91u=684435的数据,并且91u自减5* 注意:91u存在时加上-5,不存在时就设置91u=-5*/* 匹配到就更新,否则新增 */$c-update( array(name = joe), array(username = joe312, createdAt = new MongoDate(), array(upsert = true) #up(date)(in)sert);/* 删除节点 */$where=array(column_name=col685);$result=$collection-update($where,array($unset=column_exp);/* 删除节点column_exp*/* 附加新数据到节点 */$coll-update( array(b=1), array($push=array(a=wow) #附加新数据到节点a);# 如果对应节点是个数组,就附加一个新的值上去;不存在,就创建这个数组,并附加一个值在这个数组上;# 如果该节点不是数组,返回错误。# 原纪录:array(a=array(0=haha),b=1)# 新记录为:array(a=array(0=haha,1=wow),b=1)# $pushAll与$push类似,只是会一次附加多个数值到某节点/* 判断更新 */$coll-update( array(b=1), array($addToSet=array(a=wow);# 如果该阶段的数组中没有某值,就添加之# 设记录结构为array(a=array(0=haha),b=1)# 如果在a节点中已经有了wow,那么就不会再添加新的,# 如果没有,就会为该节点添加新的itemwow。/* 删除某数组节点的最后一个元素 */$coll-update( array(b=1), array($pop=array(a=1) #删除a数组节点的最后一个元素);/* 删除某数组节点的第一个元素 */$coll-update( array(b=1), array($pop=array(a=-1) #删除a数组节点的第一个元素);/* 删除某数组节点的元素 */$coll-update( array(b=1), array($pull=array(a=haha)# 如果该节点是个数组,那么删除其值为value的子项,如果不是数组,会返回一个错误。# 原记录为:array(a=array(0=haha,1=wow),b=1),# 删除a中value为haha的子项# 结果为: array(a=array(0=wow),b=1)# $pullAll与$pull类似,只是可以删除一组符合条件的记录。# 注意:# 1.注意区分替换更新与修改更新# 2.注意区分数据类型如 array(91u=684435)与array(91u=684435)/*/* 删除文档/*/* 删除 */$collection-remove(array(column_name=col399);/$collection-remove(); #清空集合/$collection-drop(); #清空,效率高于remove()/* 删除指定MongoId */$id = new MongoId(4d638ea1d549a02801000011);$collection-remove(array(_id=(object)$id);/* * 使用下面的方法来匹配_id:ObjectId(4d638ea1d549a02801000011),查询、更新也一样* $id = new MongoId(4d638ea1d549a02801000011);* array(_id=(object)$id)* */*/* 查询文档/*/* 查询文档中的记录数 */echo count:.$collection-count().; #全部echo count:.$collection-count(array(type=user).; #可以加上条件echo count:.$collection-count(array(age=array($gt=50,$lte=74).; #大于50小于等于74echo count:.$collection-find()-limit(5)-skip(0)-count(true).; #获得实际返回的结果数/* 注:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于、$exists不存在*/* 集合中所有文档 */$cursor = $collection-find()-snapshot();foreach ($cursor as $id = $value) echo $id: ; var_dump($value); echo ;/* 注意:* 在我们做了find()操作,获得$cursor游标之后,这个游标还是动态的.* 换句话说,在我find()之后,到我的游标循环完成这段时间,如果再有符合条件的记录被插入到collection,那么这些记录也会被$cursor获得.* 如果你想在获得$cursor之后的结果集不变化,需要这样做:* $cursor = $collection-find();* $cursor-snapshot();#获得快照!* 详见/index.php/2010/08/mongo_php_cursor.html*/* 查询一条数据 */$cursor = $collection-findOne();/* 注意:findOne()获得结果集后不能使用snapshot(),fields()等函数;*/* age,type 列不显示 */$cursor = $collection-find()-fields(array(age=false,type=false);/* 只显示user 列 */$cursor = $collection-find()-fields(array(user=true);/* 我这样写会出错:$cursor-f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论