最近有个项目,需要用php操作mongoDb数据,整理如下

  1,连接MongoDB数据库
$conn = new Mongo();
其他链接方式
//$conn=new Mongo(); #连接本地主机,默认端口.
//$conn=new Mongo(“172.21.15.69″); #连接远程主机
//$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:123@localhost”); #带用户名密码
//$conn=new Mongo(“mongodb://localhost:27017,localhost:27018″); #连接多个服务器
//$conn=new Mongo(“mongodb:///tmp/mongo-27017.sock”); #域套接字
//$conn=new Mongo(“mongodb://admin_miss:miss@localhost:27017/test”,array(‘persist’=>’p',”replicaSet”=>true)); #完整
  2,选择数据库与表
  $db=$conn->mydb; #选择mydb数据库
  $collection=$db->myTable; #选择集合(选择’表’)
  //$collection=$db->selectCollection(myTable); #第二种写法
  //$collection=$conn->mydb->myTable; #更简洁的写法
  3,插入数据记录
$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)
//**向集合中安全插入数据,返回插入状态(数组). **/
$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) }
  4,更新数据记录
//** 修改更新 传统更新 **/
$where=array(‘column_name’=>’col123′);
$newdata=array(‘column_exp’=>’GGGGGGG’,'column_fid’=>444);
$result=$collection->update($where,array(‘$set’=>$newdata)); #$set:让某节点等于给定值,类似的还有$pull $pullAll $pop $inc,在后面慢慢说明用法
/*
* 结果:
* 原数据
* {“_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
*/

PHP操作MongoDB 数据库总结记录

 5,删除记录操作
//** 删除节点 **/
$where=array(‘column_name’=>’col685′);
$result=$collection->update($where,array(‘$unset’=>’column_exp’));
/**
* 删除节点column_exp
*/
/*
* *
* 完整格式:update(array $criteria, array $newobj [, array $options = array()  ] )
*       注意:1.注意区分替换更新与修改更新
*    2.注意区分数据类型如 array(’91u’=>’684435′)与array(’91u’=>684435)
* *
*/
//** 清空表 **/
$collection->remove(); #清空集合
//** 删除指定MongoId **/
$id = new MongoId(“4d638ea1d549a02801000011″);
$collection->remove(array(‘_id’=>(object)$id));
  6,查询数据记录
//** 统计表记录数 **/
echo ‘count:’.$collection->count().”<br>”; #全部
echo ‘count:’.$collection->count(array(‘type’=>’user’)).”<br>”; #统计‘type’ 为 user 的记录
echo ‘count:’.$collection->count(array(‘age’=>array(‘$gt’=>50,’$lte’=>74))).”<br>”; #统计大于50小于等于74
echo ‘count:’.$collection->find()->limit(5)->skip(0)->count(true).”<br>”; #获得实际返回的结果数
/**
* 注:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于、$exists不存在
*/
//** 获取表中所有记录 **/
$cursor = $collection->find()->snapshot();
foreach ($cursor as $id => $value) {
echo “$id: “; var_dump($value); echo “<br>”;
}
/**
* 注意:
* 在我们做了find()操作,获得$cursor游标之后,这个游标还是动态的.
* 换句话说,在我find()之后,到我的游标循环完成这段时间,如果再有符合条件的记录被插入到collection,那么这些记录也会被$cursor 获得.
* 如果你想在获得$cursor之后的结果集不变化,需要这样做:
* $cursor = $collection->find();
*/
//** 查询一条数据 **/
$cursor = $collection->findOne();
/**
*  注意:findOne()获得结果集后不能使用snapshot(),fields()等函数;
*/
//** 设置显示字段 age,type 列不显示 **/
$cursor = $collection->find()->fields(array(“age”=>false,”type”=>false));
$cursor = $collection->find()->fields(array(“user”=>true)); //只显示user 列
/**
* 我这样写会出错:$cursor->fields(array(“age”=>true,”type”=>false));
*/
//** 设置条件 (存在type,age节点) and age!=0 and age<50 **/
$where=array(‘type’=>array(‘$exists’=>true),’age’=>array(‘$ne’=>0,’$lt’=>50,’$exists’=>true));
$cursor = $collection->find($where);
//** 分页获取结果集  **/
$cursor = $collection->find()->limit(5)->skip(0);
//** 排序  **/
$cursor = $collection->find()->sort(array(‘age’=>-1,’type’=>1)); ##1表示降序 -1表示升序,参数的先后影响排序顺序
//** 索引  **/
$collection->ensureIndex(array(‘age’ => 1,’type’=>-1)); #1表示降序 -1表示升序
$collection->ensureIndex(array(‘age’ => 1,’type’=>-1),array(‘background’=>true)); #索引的创建放在后台运行(默认是同步运行)
$collection->ensureIndex(array(‘age’ => 1,’type’=>-1),array(‘unique’=>true)); #该索引是唯一的
/**
* ensureIndex (array(),array(‘name’=>’索引名称’,'background’=true,’unique’=true))
* 详见:http://www.php.net/manual/en/mongocollection.ensureindex.php
*/
//** 取得查询结果 **/
$cursor = $collection->find();
$array=array();
foreach ($cursor as $id => $value) {
$array[]=$value;
}
  7.关闭链接
  $conn->close(); #关闭连接
  8,常见函数使用
  a.$inc 如果记录的该节点存在,让该节点的数值加N;如果该节点不存在,让该节点值等于N
  设结构记录结构为 array(’a’=>1,’b’=>’t’),想让a加5,那么:
  $coll->update(array(’b’=>’t’),array(’$inc’=>array(’a’=>5)))
  b.$set 让某节点等于给定值
  设结构记录结构为 array(’a’=>1,’b’=>’t’),b为加f,那么:
  $coll->update(array(’a’=>1),array(’$set’=>array(’b’=>’f’)))
  c.$unset 删除某节点
  设记录结构为 array(’a’=>1,’b’=>’t’),想删除b节点,那么:
  $coll->update(array(’a’=>1),array(’$unset’=>’b’))
  d.$push 如果对应节点是个数组,就附加一个新的值上去;不存在,就创建这个数组,并附加一个值在这个数组上;如果该节点不是数组,返回错误。
  设记录结构为array(’a’=>array(0=>’haha’),’b’=& gt;1),想附加新数据到节点a,那么:
  $coll->update(array(’b’=>1),array(’$push’=>array(’a’=>’wow’)))
  这样,该记录就会成为:array(’a’=>array(0=>’haha’,1=>’wow’),’b’=>1)
  e.$pushAll 与$push类似,只是会一次附加多个数值到某节点
  f.$addToSet 如果该阶段的数组中没有某值,就添加之
  设记录结构为array(’a’=>array(0=& gt;’haha’),’b’=>1),如果想附加新的数据到该节点a,那么:
  $coll->update(array(’b’=>1),array(’$addToSet’=>array(’a’=>’wow’)))
  如果在a节点中已经有了wow,那么就不会再添加新的,如果没有,就会为该节点添加新的item——wow。
  g.$pop 设该记录为array(’a’=>array(0=>’haha’,1=>’wow’),’b’=>1)
  删除某数组节点的最后一个元素:
  $coll->update(array(’b’=>1),array(’$pop=>array(’a’=>1)))
  删除某数组阶段的第一个元素
  $coll->update(array(’b’=>1),array(’$pop=>array(’a’=>-1)))
  h.$pull 如果该节点是个数组,那么删除其值为value的子项,如果不是数组,会返回一个错误。
  设该记录为 array(’a’=>array(0=>’haha’,1=>’wow’),’b’=>1),想要删除a中value为 haha的子项:
  $coll->update(array(’b’=>1),array(’$pull=>array(’a’=>’haha’)))
  结果为: array(’a’=>array(0=>’wow’),’b’=>1)
  i.$pullAll 与$pull类似,只是可以删除一组符合条件的记录。

PHP操作MongoDB 数据库的更多相关文章

  1. 不使用spring的情况下原生java代码两种方式操作mongodb数据库

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  2. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  3. NodeJs连接操作MongoDB数据库

    NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...

  4. C# Asp.net中简单操作MongoDB数据库(二)

    C# Asp.net中简单操作MongoDB数据库(一)    , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...

  5. C# Asp.net中简单操作MongoDB数据库(一)

    需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...

  6. python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战

    python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...

  7. python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用

    python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...

  8. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  9. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

随机推荐

  1. 【JAVA】使用IntelliJ IDEA创建Java控制台工程

    1.File->New->Project 2.选择Java,下一步 3.模板有两个:Command Line App和Java Hello World,没有太大区别 4.命名: 5.结果:

  2. Linux记录-sysctl.conf优化方案

    Sysctl是一个允许您改变正在运行中的Linux系统的接口.它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百 ...

  3. golang json反序列化

    package main import ( "encoding/json" "fmt" "reflect" ) type js struct ...

  4. STL优先队列

    #include<cstdio> #include<iostream> #include<algorithm> #include<queue> usin ...

  5. 使用JSX的注意事项

    react中JSX是一种JavaScript + xml语法,用来创建虚拟DOM和声明组件.他可以更好的让我们读.写模板或组件. JSX语法浏览器是不识别的,需要通过babel 来进行转换成浏览器识别 ...

  6. 自学python 6.

    内容:id() is == 编码 解码1.好声音选秀比赛评委在打分的时候可以进行输入. 假设有10个评委.让10个评委进行打分, 要求, 分数必须大于5分, 小于10分.count = 1while ...

  7. 自学python 5.

    1.tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "na ...

  8. vue 组件动态 循环

    组件可以是动态的,记录如下 <div v-for="item in arrComponent"> <component v-bind:is="item. ...

  9. 开源框架.netCore DncZeus学习(五)下拉树的实现

    千里之行,始于足下,先从一个小功能研究起,在菜单管理页面有一个下拉树,先研究下它怎么实现的 1.先找到menu.vue页面 惯性思维先搜索请选择三个字,原来是动态生成的 再向上找DropDown组件, ...

  10. Mono.Cecil

    Mono Cecil十分强大,强大到可以静态注入程序集(注入后生成新的程序集)和动态注入程序集(注入后不改变目标程序集,只在运行时改变程序集行为),它甚至可以用来调试PDB MDB调试符号格式文件. ...