基於MongoDB的php應用開發

來源:互聯網
上載者:User
  一、串連資料庫主機 串連本地主機,連接埠為27017: $connection = new Mongo();
串連遠程主機,連接埠為預設連接埠: $connection= new Mongo( "192.168.2.1" );
串連遠程主機,連接埠為指定連接埠: $connection = new Mongo( "192.168.2.1:65432" );
選擇資料庫,如果指定的資料庫不存在,則會自動建立一個新的資料庫,有2種方法: $db = $connection->selectDB('dbname'); 或 $db = $connection->dbname;
選擇集合(collection),與使用關係型資料庫中的表類似,有2種方法: $collection = $db->selectCollection('people'); 或 $collection = $db->people;
二、插入新文檔(document) collection對象用來執行資訊管理,例如,想儲存一個關於某人的資訊,可以如下編碼: $person = array(  'name' => 'Cesar Rodas',  'email' => 'crodas@php.net',  'address' => array(   array(    'country' => 'PY',    'zip' => '2160',    'address1' => 'foo bar'   ),   array(    'country' => 'PY',    'zip' => '2161',    'address1' => 'foo bar bar foo'   ),  ),  'sessions' => 0, );
$safe_insert = true; $collection->insert($person, $safe_insert); $person_identifier = $person['_id'];
其中: $safe_insert參數用於等待MongoDB完成操作,以便確定是否成功,預設值為false,當有大量記錄插入時使用該參數會比較有用。 插入新文檔後,MongoDB會返回一個記錄標識。
三、更新文檔 例如,更新上面已經建立的個人資訊,增加sessions屬性值,在第1個address處增加address2屬性,刪除第2個address,代碼如下: 首先,定義一個filter(過濾器)告訴MongoDB要更新一個指定的文檔 $filter = array('email' => 'crodas@php.net'); $new_document = array(  '$inc' => array('sessions' => 1),  '$set' => array(    'address.0.address2' =>  'Some foobar street',  ),  '$unset' => array('address.1' => 1), ); $options['multiple'] = false; $collection->update(  $filter,  $new_document,  $options );
MongoDB也支援批次更新,與關係型資料庫類似,可以更新給定條件的所有文檔,如果想這麼做的話,就需要設定options的multiple的值為true.
四、查詢文檔 定義一個符合給定標準的條件過濾器,通過使用查詢選取器來擷取文檔。 例,通過e-mail address來擷取資訊: $filter = array('email' => 'crodas@php.net'); $cursor = $collection->find($filter); foreach ($cursor as $user)  {   var_dump($user); }
例,擷取sessions大於10的資訊: $filter = array('sessions' => array('$gt' => 10)); $cursor = $collection->find($filter);
例,擷取沒有設定sessions屬性的資訊: $filter = array(  'sessions' => array('$exists' => false) ); $cursor = $collection->find($filter);
例,擷取地址在PY並且sessions大於15的資訊: $filter = array(  'address.country' => 'PY',  'sessions' => array('$gt' => 10) ); $cursor = $collection->find($filter);
有一個重要的細節需要注意,只有當需要結果的時候查詢才會被執行,在第1個例子中,當foreach迴圈開始時,查詢才被執行。 這是個很有用的特性,因為這可以通過在遊標(cursor)中增加選項來取回結果,恰好在定義查詢後,執行查詢前這個時刻。例如,可以設定選項來執行分頁,或者擷取指定數目的匹配的文檔。 $total = $cursor->total(); $cursor->limit(20)->skip(40); foreach($cursor as $user) { }
五、擷取文檔的聚類 MongoDB支援結果的聚類,類似於關聯式資料庫,可以使用count,distinct和group等聚類操作。 聚類查詢返回數組(array),而不是整個文檔對象。 分組操作允許定義用Javascript編寫的MongoDB伺服器端功能,該操作執行分組屬性。因為可以執行許多帶有分組值的操作類型,所以會更靈活,但是相比SQL執行例如SUM(),AVG()等 簡單的分組操作來說,這還是有些困難。 下面這個例子示範了如何擷取國家的的地址清單,以及匹配地址的國家出現的次數: $countries = $collection->distinct(  array("address.country") ); $result = $collection->group(    array("address.country" => True),
   array("sum" => 0),    
      "function (obj, prev) { prev.sum += 1; }",
   array("session" => array('$gt' => 10))
);
六、刪除文檔 刪除文檔與擷取或更新文檔很類似。 $filter = array('field' => 'foo'); $collection->remove($filter);
要注意,預設所有合格文檔都會被刪除,如果只想刪除合格第1個文檔,那麼在給remove函數的第二個參數賦值為true。
七、索引支援 有一個很重要的特點,使得決定選擇MongoDB,而不是選擇其它的類似的面向文檔的資料庫,這個特點就是對索引的支援,這和關係型資料庫的表索引很類似,並不是所有的面向文檔的資料庫都 提供內建的索引支援。 使用MongoDB的建立索引功能可以避免在查詢期間在所有文檔中進行操作,這就象關聯式資料庫中使用索引來避免全表查詢一樣。這可以加速那些涉及到索引屬性的合格文檔的查詢。 例如,如果想在e-mail地址屬性上建立唯一的索引,如下所示: $collection->ensureIndex(  array('email' => 1),  array('unique' => true, 'background' => true) );
第1個數組參數描述將要成為索引的所有屬性,可以是1個或多個屬性。 預設情況下,索引的建立是一個同步操作,所以,如果文檔數目很大的話,把索引的建立放在後台運行會是個好主意,就象上面例子所示範的。 只有一個屬性的索引可能不夠用,下面這個例子示範如何通過在2個屬性上定義索引來加速查詢。 $collection->ensureIndex(     array('address.country' => 1, 'sessions' => 1),   array('background' => true) );
每個索引的值定義了索引的順序:1表示降序(descending),-1表示升序(ascending) 索引順序在有排序選項的查詢最佳化中是有用的,如下例所示: $filter = array(      'address.country' => 'PY', ); $cursor = $collection->find($filter)->order(   array('sessions' => -1) );
$collection->ensureIndex(  array('address.country' => 1, 'sessions' => -1),  array('background' => true) );
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.