以前都是玩mysql的,從這週開始接觸mongodb,並且用php查了一波mongodb。其實和mysql差不多,只是換了乙個資料庫,所以查詢語句的寫法不一樣。在這裡簡單總結一下。
一、mongodb
mysql是關聯式資料庫,mongodb是非關聯式資料庫,nosql(not only sql 我以前一直以為就是 no-sql)。
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))
if (!empty($from))
if (!empty($to))
if (!empty($attach))
if (!empty($subject))
//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)
if ($page>$pagenum)
if($page<10)
elseif ($page>=10 && $page
elseif ($page>=($pagenum-9+1))
$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
一 插入資料 例 向預設的test資料庫的wj表中插入資料 manager new mongodb driver manager mongodb localhost 27017 插入資料 bulk new mongodb driver bulkwrite manager executebulkwri...
PHP 常見mongodb查詢操作
字段字串為 querys array name shian 數值等於多少 querys array number 7 數值大於多少 querys array number array gt 5 數值大於等於多少 querys array number array gte 2 數值小於多少 query...
PHP之MongoDB的查詢
專案上有乙個使用mongodb自動生成的objectid來查詢資訊的需求 soft name array soft ver array m ids array ids array explode ids 將字串id轉換為陣列id 這一步踩了坑,一開始不知道string型別不可以直接find需要先ne...