php简单查询mongoDB

以前都是玩mysql的,从这周开始接触mongoDB,并且用php查了一波mongoDB。其实和mysql差不多,只是换了一个数据库,所以查询语句的写法不一样。在这里简单总结一下。

一、mongoDB

mysql是关系数据库,mongoDB是非关系数据库,nosql(not only sql 我以前一直以为就是 no-sql)。



mongoDB特点(这部分是慕课网的视频课程我做的笔记,我觉得讲的还是比较清楚。)
1. 没有数据结构的限制
(1)没有表结构的概念,每条记录可以有完全不同的结构
(2)业务开发方便快捷
(3)sql数据库要事先定义表结构再使用
2. 完全的索引支持
(1)redis只能按键查询key-value
(2)hbase的单索引,二级索引需要自己构建
而mongoDB支持单键索引、多键索引、数组索引、全文索引、地理位置索引等。
3. 方便的冗余和扩展
(1)复制集保证数据安全
(2)分片扩展数据规模
4. 良好的支持
完善的文档和齐全的驱动

二、php操作mongoDB

对于mongoDB的了解也就仅限于此。接下来的任务就是用php操作mongoDB,这里主要涉及的是简单的查询。

这次的学习有点急功近利,就想着赶紧学会用,根本没有对mongoDB有一个很系统、很深入的了解。(当然时间不允许啦,不然强迫症的我估计会从头学起啊。)

php操作mongoDB,我是从另外的一个教程学习的,现在把地址贴在这。

mongoDB PHP 教程

我本以为这样就可以顺利完成任务,其实我还是图样。

这样讲没什么意思,我还是上代码吧。

<?php 

// connect
$m = new MongoClient();

// select a database
$db = $m->HT_Email;

// select a collection (analogous to a relational database's table)
$collection = $db->Email;

$cc= isset($_REQUEST['cc'])?($_REQUEST['cc']):"";
$from = isset($_REQUEST['from'])?($_REQUEST['from']):"";
$to = isset($_REQUEST['to'])?($_REQUEST['to']):"";
$attach = isset($_REQUEST['attach'])?($_REQUEST['attach']):"";
$subject = isset($_REQUEST['subject'])?($_REQUEST['subject']):"";

//where
$query = array();
if (!empty($cc)) {
  $query = array_merge(array('cc_user'=>new MongoRegex("/.*".$cc.".*/i")),$query);
}
if (!empty($from)) {
  $query = array_merge(array('from_user'=>new MongoRegex("/.*".$from.".*/i")),$query);
}
if (!empty($to)) {
  $query = array_merge(array('to_user'=>new MongoRegex("/.*".$to.".*/i")),$query);
}
if (!empty($attach)) {
  $query = array_merge(array('attachments'=>new MongoRegex("/.*".$attach.".*/i")),$query);
}
if (!empty($subject)) {
  $query = array_merge(array('subject'=>new MongoRegex("/.*".$subject.".*/i")),$query);
}

//page
  $pagesize = 10; //每页显示的数据条数
  $page = isset($_GET['page'])?intval($_GET['page']):1;  //获取页数信息
  $offset = ($page - 1) * $pagesize;  //偏移量( //获取limit的第一个参数的值 offset ,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。 (传入的页数-1) * 每页的数据 得到limit第一个参数的值)
  $total = $collection->find($query)->skip(0)->count(true);
  $pagenum = ceil($total/$pagesize);  //获得总页数

  if ($page<1) {
    $page=1;
  }

  if ($page>$pagenum){
    $page= $pagenum;
  }

  if($page<10){
    $start =1 ;
    $end = 9;
  }
  elseif ($page>=10 && $page<($pagenum-9+1)) 
  {
    $start =$page -4;
    $end = $page +4;
  }
  elseif ($page>=($pagenum-9+1)) 
  {
    $start= $pagenum-9+1;
    $end = $pagenum;
  }
  $pre= $page-1;
  $next= $page+1;

  $page_params = "&from=$from&to=$to&subject=$subject&cc=$cc&attach=$attach";

//find
$cursor = $collection->find($query)->limit($pagesize)->skip($offset);

?>  
代码都有注释,我还是简单解释一下我研究这一段的心路历程。

刚开始就是连接数据库啊,这里因为web和mongoDB在一台服务器上,所以直接省略了参数。

选择数据库和集合。

接下来就是接收前端页面传来的参数。这里不用说了吧,input的name和php的request对应。

然后写查询条件,在sql里就是where。

首先判断你有没有接收到参数,如果非空,开始写条件。

mongoDB的条件是写在一个数组中,你要查哪个字段,值是什么。

这里的MongoRegex是用来模糊匹配的。

array_merge是数组的合并,用来实现多条件查询。

接下来是分页,这个之前讲过。需要注意的是$total的计算。就要用到mongoDB统计的语法count()。

还要注意的一点就是,要写翻页参数。

查询语句是find。把我们刚才构造好的查询条件当做参数就好了。

翻页的查询语句是用limit和skip来实现的。这里类比mysql的limit  $pagesize,$offset 很容易理解。

翻页显示页数的代码和mysql一样,这里就不写了。


至此,就可以很简单的查询mongoDB的数据。

mongoDB是一条新的路,希望自己可以在这方面再深入学习。



在使用PHP查询MongoDB时,可以使用以下语法格式进行查询操作: 1. 连接到MongoDB数据库和集合。 2. 构建查询条件,可以根据需要设置查询的字段和条件。例如,要查询名字以"j"开头的记录,可以使用MongoRegex进行模糊查询,语法格式为:$db->find(array('name' => new MongoRegex("/^j/"))); 3. 使用find方法执行查询操作,并将结果保存到变量。 4. 遍历查询结果,可以使用foreach循环进行处理和展示。 下面是一个示例代码: ```php // 连接到MongoDB数据库和集合 $mongoClient = new MongoClient(); $db = $mongoClient->selectDB('your_database_name'); $collection = $db->selectCollection('your_collection_name'); // 构建查询条件 $query = array('name' => new MongoRegex("/^j/")); // 执行查询操作 $results = $collection->find($query); // 处理查询结果 foreach ($results as $document) { echo $document['name'] . ", " . $document['age'] . "<br>"; } ``` 请注意,你需要将"your_database_name"和"your_collection_name"替换为你实际使用的数据库和集合名称。此外,你还可以根据具体需求自定义查询条件和输出结果的格式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [php简单查询mongoDB](https://blog.csdn.net/u012603073/article/details/47156295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [PHP操作Mongodb之高级查询篇](https://blog.csdn.net/aikan1508/article/details/102418760)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值