分類: 網頁開發

PHP 使用 MongoDB 資料庫入門範例教學

更新資料

在 MongoDB 的資料更新方法有兩種,一種是更新 document 中部份的資訊,假設 documents 的資料是這樣:

{
  "firstName" : "G.T.",
  "lastName" : "Wang",
  "roles" : [  "developer",  "webmaster" ]
}

更新 email 的資訊:

$cDemo->update(
  array("firstName" => "G.T.", "lastName" => "Wang"),
  array('$set' => array("email" => "gtw@gtwang.org"))
);

更新之後,會變成這樣:

{
  "firstName" : "G.T.",
  "lastName" : "Wang",
  "roles" : [  "developer",  "webmaster" ],
  "email" : "gtw@gtwang.org"
}

另外一種更新方式是將整筆 document 覆蓋過去,假設 documents 的資料是這樣:

{
  "firstName" : "G.T.",
  "lastName" : "Wang",
  "roles" : [  "developer",  "webmaster" ]
}

使用新的 document 直接蓋掉舊的:

$cDemo->update(
  array("firstName" => "G.T.", "lastName" => "Wang"),
  array(
    "username" => "gtwang",
    "info" => array("name" => "G. T. Wang", "email" => "gtw@gtwang.org"),
    "likes" => array()
  )
);

更新之後,會變成這樣:

{
  "username" : "gtwang",
  "info" : { "name" : "G. T. Wang", "email" : "gtw@gtwang.org" },
  "likes" : [ ]
}

其他進階的範例請參考 update 的網頁說明文件。

刪除資料

假設我們想要刪除這一筆資料:

{
  "_id" : ObjectId("5650f638b2fd7f7b198b4567"),
  "firstName" : "G.T.",
  "lastName" : "Wang",
  "roles" : [  "developer",  "webmaster" ]
}

可以依據 _id 刪除:

$id = '5650f638b2fd7f7b198b4567';
$cDemo->remove(array('_id' => new MongoId($id)));

或是使一般的查詢條件來找出這一筆 document 並刪除:

$cDemo->remove(
  array("firstName" => "G.T.", "lastName" => "Wang")
);

假設資料庫中有很多筆重複的資料時:

{ "_id" : ObjectId("5650fb61b2fd7fd91b8b4567"), "firstName" : "G.T.", "lastName" : "Wang", "roles" : [  "developer",  "webmaster" ] }
{ "_id" : ObjectId("5650fb92b2fd7fec1b8b4567"), "firstName" : "G.T.", "lastName" : "Wang", "roles" : [  "developer",  "webmaster" ] }
{ "_id" : ObjectId("5650fb93b2fd7fee1b8b4567"), "firstName" : "G.T.", "lastName" : "Wang", "roles" : [  "developer",  "webmaster" ] }
{ "_id" : ObjectId("5650fb94b2fd7ff01b8b4567"), "firstName" : "G.T.", "lastName" : "Wang", "roles" : [  "developer",  "webmaster" ] }

我們可以利用這樣的方式把重複的資料刪掉,只留下一筆:

$condition = array("firstName" => "G.T.", "lastName" => "Wang");

// 計算重複資料筆數
$remaining = $cDemo->count($condition);

// 要刪除的資料筆數
$delete = $remaining - 1;

// 刪除資料
while ($delete > 0) {
  $cDemo->remove($condition, array("justOne" => true));
  $delete--;
}

執行完之後,就只會剩下一筆:

{ "_id" : ObjectId("5650fb94b2fd7ff01b8b4567"), "firstName" : "G.T.", "lastName" : "Wang", "roles" : [  "developer",  "webmaster" ] }

Page: 1 2 3 4

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: MongoDBNoSQLPHP

Recent Posts

[開箱] Marttiini MFT G10 芬蘭北歐直刀

本篇是 Marttiini M...

3 年 ago

[開箱] 一般打火棒、鎂塊打火棒

本篇是鎂塊打火棒與一般普通打火...

3 年 ago

[開箱] 瑞典 BAHCO 396-Lap 魚牌軍規摺疊鋸

本篇為瑞典 BAHCO 396...

3 年 ago

[DIY] 野炊水煮蛋、紅豆湯記錄

本篇記錄今年過年期間帶阿玄在家...

3 年 ago

[竹北素食] 善菓堂 SHAN GUO TANG

本篇是我最近去竹北善菓堂用餐時...

3 年 ago

Linux 複製檔案 cp 指令用法教學與範例

本篇介紹如何在 Linux 系...

3 年 ago