MongoDB 作為主流 NoSQL 資料函式庫,以檔案為單位儲存資料,支援多樣化的資料型別,滿足不同應用場景的需求。理解資料型別和 CRUD 操作是 MongoDB 開發的基礎。本文從實務角度出發,以程式碼範例和說明,帶領讀者深入理解 MongoDB 的資料型別和 CRUD 操作。首先,文章介紹了 MongoDB 支援的各種資料型別,例如 JavaScript(帶作用域)、Timestamp、Boolean、Min/Max Key 和 Decimal128,並說明瞭不同資料型別之間的比較和排序規則。接著,文章詳細講解了 MongoDB 的 CRUD 操作,包括使用 insert()insertOne()insertMany() 建立檔案,使用 find() 讀取檔案,使用 update()updateOne()updateMany() 更新檔案,以及使用刪除操作移除檔案。此外,文章也涵蓋了批次寫入操作的應用,並說明瞭 _id 欄位的重要性以及有序插入的設定。

MongoDB 資料型別詳解

MongoDB 支援多種資料型別,能夠滿足不同的資料儲存需求。本章節將探討 MongoDB 中的各種資料型別,並透過實際範例展示其使用方法。

JavaScript(帶有作用域)資料型別

MongoDB 支援 JavaScript(帶有作用域)資料型別,允許在檔案中儲存 JavaScript 程式碼及其相關的作用域變數。

db.BPBOnlineBooksDataTypesCollection.find({
  "Data Type Alias": "javascriptWithScope"
}).pretty();

內容解密:

此查詢用於檢索 BPBOnlineBooksDataTypesCollection 集合中,Data Type AliasjavascriptWithScope 的檔案。

  • db.BPBOnlineBooksDataTypesCollection.find():在指定的集合中執行查詢。
  • {"Data Type Alias": "javascriptWithScope"}:指定查詢條件,篩選出 Data Type AliasjavascriptWithScope 的檔案。
  • .pretty():以格式化的 JSON 格式顯示查詢結果。

Timestamp 資料型別

Timestamp 資料型別用於儲存事件發生的時間,精確到毫秒。

var BPBBooksTimestamp = new Timestamp();
db.BPBOnlineBooksDataTypesCollection.insert({
  "Data Type Alias": "timestamp",
  "Data Type Number": "17",
  "Data Type Value": BPBBooksTimestamp
});

內容解密:

此範例展示如何建立一個 Timestamp 變數,並將其插入到 MongoDB 集合中。

  • var BPBBooksTimestamp = new Timestamp();:建立一個新的 Timestamp 物件。
  • db.BPBOnlineBooksDataTypesCollection.insert():將包含 Timestamp 的檔案插入到集合中。
  • "Data Type Value": BPBBooksTimestamp:將 Timestamp 變數的值儲存到檔案中。

Boolean 資料型別

Boolean 資料型別用於儲存布林值(true 或 false)。

var BPBBooksBoolean1 = true;
var BPBBooksBoolean2 = false;
db.BPBOnlineBooksDataTypesCollection.insert({
  "Data Type Alias": "bool",
  "Data Type Number": "8",
  "Data Type Value 1": BPBBooksBoolean1,
  "Data Type Value 2": BPBBooksBoolean2
});

內容解密:

此範例展示如何建立布林變數,並將其插入到 MongoDB 集合中。

  • var BPBBooksBoolean1 = true;var BPBBooksBoolean2 = false;:建立兩個布林變數。
  • db.BPBOnlineBooksDataTypesCollection.insert():將包含布林值的檔案插入到集合中。

Min 和 Max Key

Min Key 和 Max Key 是 MongoDB 中的內部資料型別,用於比較 BSON 元素的最低和最高值。

Decimal128 資料型別

Decimal128 資料型別在 MongoDB 3.4 版本中引入,用於儲存高精確度的十進位制數值,能夠支援最多 34 位小數精確度。

比較和排序順序

MongoDB 在比較不同 BSON 型別的資料時,遵循特定的排序順序:

  1. MinKey
  2. Null
  3. Numbers(ints, longs, doubles)
  4. Symbol, String
  5. Object
  6. Array
  7. BinData
  8. ObjectId
  9. Boolean
  10. Date
  11. Timestamp
  12. Regular expression
  13. MaxKey
var BPBBooksVar1 = 100000;
var BPBBooksVar2 = "BPB Publications";
var BPBBooksVar3 = 77.07;
var BPBBooksVar4 = true;
var BPBBooksVar5 = null;
var BPBBooksVar6 = MinKey;
var BPBBooksVar7 = MaxKey;

db.BPBOnlineBooksDataTypesCollectionV2.insert([
  { "Data Type Alias": "int", "Data Type Value": BPBBooksVar1 },
  { "Data Type Alias": "string", "Data Type Value": BPBBooksVar2 },
  { "Data Type Alias": "double", "Data Type Value": BPBBooksVar3 },
  { "Data Type Alias": "bool", "Data Type Value": BPBBooksVar4 },
  { "Data Type Alias": "null", "Data Type Value": BPBBooksVar5 },
  { "Data Type Alias": "minKey", "Data Type Value": BPBBooksVar6 },
  { "Data Type Alias": "maxKey", "Data Type Value": BPBBooksVar7 }
]);

db.BPBOnlineBooksDataTypesCollectionV2.find().sort({ "Data Type Value": 1 });

內容解密:

此範例展示如何插入不同資料型別的資料,並按照特定的排序順序進行排序。

  • db.BPBOnlineBooksDataTypesCollectionV2.insert():批次插入包含不同資料型別的檔案。
  • db.BPBOnlineBooksDataTypesCollectionV2.find().sort():查詢並按照 Data Type Value 欄位進行升序排序。

MongoDB CRUD 操作介紹

本章節將探討 MongoDB 的 CRUD 操作,包括建立、讀取、更新和刪除操作,並涵蓋 MongoDB 中的批次寫入操作。所有範例都將以逐步的方式進行講解,並結合實際範例和多種方法來執行這些操作。

本章節結構

在本章節中,我們將討論以下主題:

  • MongoDB 建立操作
  • MongoDB 讀取操作
  • MongoDB 更新操作
  • MongoDB 刪除操作
  • MongoDB 批次寫入

學習目標

完成本章節後,您應該能夠使用 MongoDB 建立操作建立檔案,使用 MongoDB 讀取操作讀取檔案,使用 MongoDB 更新操作更新檔案,使用 MongoDB 刪除操作刪除檔案,並學會如何使用 MongoDB 批次寫入方法執行各種 CRUD 操作。

MongoDB 建立操作

MongoDB 提供了多種方法來建立檔案,包括:

  • db.collection.insert()
  • db.collection.insertOne()
  • db.collection.insertMany()

這些方法用於在 MongoDB 集合中插入或建立檔案。

db.collection.insert() 方法

此方法可插入一個或多個檔案到 MongoDB 集合中。

db.collection.insert(
    <單個檔案或多個檔案的陣列>,
    {
        ordered: <布林值true  false>
    }
)
範例 1:使用 insert() 方法建立單個檔案

首先,建立一個變數 BPBBooksBestSellingEditions,包含要插入集合的 JSON 資料。

var BPBBooksBestSellingEditions = {
    'Title': '雲端運算',
    'Year': '2019',
    'ISBN': '9789388511407',
    'Pages': 330,
    'Weight': '570gm',
    'Dimension': '23x19x1.5cm'
};

然後,使用 insert() 方法在 BPBOnlineBooksCollection 集合中建立新檔案。

db.BPBOnlineBooksCollection.insert(BPBBooksBestSellingEditions);

程式碼解析:

  1. 定義了一個名為 BPBBooksBestSellingEditions 的 JSON 物件,包含書籍的詳細資訊。
  2. 使用 db.BPBOnlineBooksCollection.insert() 方法將該物件插入到 BPBOnlineBooksCollection 集合中。
範例 2:使用 insert() 方法建立多個檔案

建立一個包含多個檔案的 JSON 陣列,並使用 insert() 方法插入到集合中。

var BPBBooksBestSellingEditions = [{
    'Title': '數位行銷導論',
    'Year': '2019',
    'ISBN': '9789389328189',
    'Pages': 464
}, {
    'Title': '物聯網與智慧城市',
    'Year': '2019',
    'ISBN': '9789388511322',
    'Pages': 242,
    'Weight': '357gm',
    'Dimension': '22.5x15x1.5gm'
}];

db.BPBOnlineBooksCollection.insert(BPBBooksBestSellingEditions);

程式碼解析:

  1. 定義了一個包含多個書籍資訊的 JSON 陣列。
  2. 使用 insert() 方法將該陣列中的所有檔案插入到 BPBOnlineBooksCollection 集合中。

db.collection.insertOne() 方法

此方法用於插入單個檔案到 MongoDB 集合中。

db.collection.insertOne(
    <單個檔案>
)
範例:使用 insertOne() 方法建立單個檔案
var BPBBooksBestSellingEditions = {
    'Title': 'Python 機器學習',
    'Year': '2018',
    'ISBN': '9789386551931',
    'Pages': 267
};

db.BPBOnlineBooksCollection.insertOne(BPBBooksBestSellingEditions);

程式碼解析:

  1. 定義了一個包含書籍資訊的 JSON 物件。
  2. 使用 insertOne() 方法將該物件插入到 BPBOnlineBooksCollection 集合中。

db.collection.insertMany() 方法

此方法用於插入多個檔案到 MongoDB 集合中。

db.collection.insertMany(
    [<檔案1>, <檔案2>, ... <檔案n>],
    {
        ordered: <布林值>
    }
)
範例:使用 insertMany() 方法建立多個檔案
var BPBBooksBestSellingEditions = [{
    'Title': '人工智慧倫理與國際法導論',
    'Year': '2019',
    'ISBN': '9789388511629',
    'Pages': 188,
    'Weight': '268gm'
}, {
    'Title': '機器學習與深度學習演算法實務',
    'Year': '2019',
    'ISBN': '9789388511131',
    'Pages': 280,
    'Weight': '424gm'
}];

db.BPBOnlineBooksCollection.insertMany(BPBBooksBestSellingEditions);

程式碼解析:

  1. 定義了一個包含多個書籍資訊的 JSON 陣列。
  2. 使用 insertMany() 方法將該陣列中的所有檔案插入到 BPBOnlineBooksCollection 集合中。

_id 欄位

在 MongoDB 中,每個檔案必須有一個 _id 欄位,並且必須是唯一的。它在 MongoDB 集合中扮演著主鍵的角色。

MongoDB 檔案操作詳解

MongoDB 是一種流行的 NoSQL 資料函式庫,以其靈活的資料模型和高效的效能而聞名。在 MongoDB 中,資料以檔案的形式儲存,而檔案的操作是資料函式倉管理的基礎。本文將探討 MongoDB 中的檔案建立、讀取和更新操作。

MongoDB 檔案建立

在 MongoDB 中,檔案是資料儲存的基本單位。當建立一個新檔案時,如果沒有指定 _id 欄位,MongoDB 會自動建立一個 _id 欄位,並將其值設定為 ObjectId 型別。_id 欄位是檔案的唯一識別碼,因此必須在集合中保持唯一。

指定 _id

雖然 MongoDB 可以自動產生 _id 值,但我們也可以手動指定。只要 _id 值在集合中是唯一的,就可以選擇任何 BSON 資料型別(除了陣列)作為 _id 的值。

var BPBBooksBestSellingEditions = {
  '_id': '20021111',
  'Title': 'Introduction to Database Management',
  'Year': '2002',
  'ISBN': '9788176566384',
  'Pages': 342
};

db.BPBOnlineBooksCollection.insert(BPBBooksBestSellingEditions);

有序插入

當使用 insert()insertMany() 方法插入多個檔案時,可以設定 ordered 選項。如果 ordered 設定為 true(預設值),則當插入某個檔案時發生錯誤,MongoDB 將停止處理剩餘的檔案並傳回錯誤。如果 ordered 設定為 false,則 MongoDB 將繼續處理剩餘的檔案。

MongoDB 檔案讀取

MongoDB 提供了 find() 方法來讀取集合中的檔案。

基本查詢

使用 find() 方法可以讀取集合中的所有檔案,或根據特定的查詢條件篩選檔案。

// 讀取所有檔案
db.BPBOnlineBooksCollection.find();

// 根據查詢條件讀取檔案
db.BPBOnlineBooksCollection.find({'Year': '2002'});

使用 pretty() 方法

結合 pretty() 方法,可以使 find() 方法的輸出結果更易讀。

db.BPBOnlineBooksCollection.find({'Year': '2019'}).pretty();

MongoDB 檔案更新

MongoDB 提供了多種方法來更新集合中的檔案,包括 update()updateOne()updateMany()

$set$unset 運算子

  • $set 運算子用於設定檔案中欄位的值。
  • $unset 運算子用於刪除檔案中的欄位。

使用 update() 方法

update() 方法可以根據查詢條件更新一個或多個檔案。

var BPBBooksSelectionQuery = {
  'Title': 'Introduction to Database Management'
};

var BPBBooksDatatoUpdate = {
  'Title': 'Introduction to Database Management (The Complete Text Book for Computer Science Students)'
};

db.BPBOnlineBooksCollection.update(BPBBooksSelectionQuery, {
  $set: BPBBooksDatatoUpdate
});

更新操作的注意事項

在使用更新方法時,需要注意選擇合適的更新運算子和選項,以確保資料的一致性和正確性。