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 Alias 為 javascriptWithScope 的檔案。
db.BPBOnlineBooksDataTypesCollection.find():在指定的集合中執行查詢。{"Data Type Alias": "javascriptWithScope"}:指定查詢條件,篩選出Data Type Alias為javascriptWithScope的檔案。.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 型別的資料時,遵循特定的排序順序:
- MinKey
- Null
- Numbers(ints, longs, doubles)
- Symbol, String
- Object
- Array
- BinData
- ObjectId
- Boolean
- Date
- Timestamp
- Regular expression
- 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);
程式碼解析:
- 定義了一個名為
BPBBooksBestSellingEditions的 JSON 物件,包含書籍的詳細資訊。 - 使用
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);
程式碼解析:
- 定義了一個包含多個書籍資訊的 JSON 陣列。
- 使用
insert()方法將該陣列中的所有檔案插入到BPBOnlineBooksCollection集合中。
db.collection.insertOne() 方法
此方法用於插入單個檔案到 MongoDB 集合中。
db.collection.insertOne(
<單個檔案>
)
範例:使用 insertOne() 方法建立單個檔案
var BPBBooksBestSellingEditions = {
'Title': 'Python 機器學習',
'Year': '2018',
'ISBN': '9789386551931',
'Pages': 267
};
db.BPBOnlineBooksCollection.insertOne(BPBBooksBestSellingEditions);
程式碼解析:
- 定義了一個包含書籍資訊的 JSON 物件。
- 使用
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);
程式碼解析:
- 定義了一個包含多個書籍資訊的 JSON 陣列。
- 使用
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
});
更新操作的注意事項
在使用更新方法時,需要注意選擇合適的更新運算子和選項,以確保資料的一致性和正確性。