php簡單查詢mongoDB

來源:互聯網
上載者:User

以前都是玩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是一條新的路,希望自己可以在這方面再深入學習。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.