MongoDB Shell 提供了豐富的操作方法,方便開發者管理和操作資料函式庫。理解 MongoDB 的資料型別對於有效設計和使用資料函式庫至關重要。本文將會介紹常用的 Shell 方法,例如 db.stats()、db.collection.count() 和遊標操作方法,並探討 MongoDB 支援的各種資料型別,包含數值型別、字串、二進位制資料、物件、陣列以及其他特殊型別,例如 ObjectId、布林值、日期和正規表示式等。此外,文章還會探討如何在 MongoDB 中使用 JavaScript 程式碼以及如何處理不同型別的資料。
MongoDB Shell 方法與資料型別介紹
本章節將探討 MongoDB Shell 的各種方法,並進一步介紹 MongoDB 中的資料型別。
MongoDB Shell 方法
MongoDB 提供了豐富的 Shell 方法,用於操作和管理資料函式庫、集合以及遊標等。以下是一些常用的方法:
資料函式庫方法
db.stats():傳回資料函式庫的統計資訊,包括資料大小、索引大小等。db.serverStatus():提供資料函式庫伺服器的狀態資訊,包括操作計數、記憶體使用情況等。
集合方法
db.collection.count():傳回集合中檔案的數量,可以根據查詢條件進行篩選。db.collection.stats():傳回集合的統計資訊,包括檔案數量、索引大小等。db.collection.totalSize():傳回集合的總大小,包括資料和索引的大小。db.collection.validate():檢查集合的資料和索引的正確性,可以選擇是否進行全面掃描。db.collection.drop():刪除指定的集合,並移除相關的索引。
遊標方法
在 MongoDB 中,當使用 db.collection.find() 方法查詢檔案時,傳回的是一個指向這些檔案的指標,稱為遊標。以下是一些常用的遊標方法:
cursor.count():傳回遊標所指向的檔案數量。cursor.pretty():以易於閱讀的格式列印查詢結果。cursor.sort():對查詢結果進行排序,可以指定升序或降序。
MongoDB 中的資料型別
MongoDB 使用 BSON(Binary JSON)格式儲存資料,支援多種資料型別。以下是一些常見的資料型別:
數值型別
- 整數(Integer):用於儲存整數值。
- 雙精確度浮點數(Double):用於儲存浮點數值。
字串與二進位制資料
- 字串(String):用於儲存文字資料。
- 二進位制資料(Binary data):用於儲存二進位制資料,如圖片或檔案。
結構化資料
- 物件(Object):用於儲存巢狀的檔案結構。
- 陣列(Array):用於儲存一組值的列表。
其他型別
- 物件 ID(Object Id):用於唯一標識檔案。
- 布林值(Boolean):用於儲存真或假的值。
- 日期(Date):用於儲存日期和時間。
- 空值(Null):用於表示空或不存在的值。
- 正規表示式(Regular expression):用於儲存正規表示式模式。
- JavaScript 與 JavaScript with scope:用於儲存 JavaScript 程式碼或帶有作用域的 JavaScript 程式碼。
- 時間戳(Timestamp):用於儲存時間戳記,通常用於記錄操作時間。
問題與思考
- MongoDB Shell 的預設語言是什麼?
- MongoDB 是否支援 JavaScript 以外的語言?
- 請列舉幾種 MongoDB 支援的程式語言。
- 如何使用
db.connect()方法連線到 MongoDB 伺服器? - 如何計算集合的大小?
- 什麼是 MongoDB 中的遊標?
內容解密:
上述問題與思考部分,引導讀者回顧本章節的重要概念,並鼓勵進一步學習和探索 MongoDB 的相關知識。接下來的章節將探討 MongoDB 的資料型別及其應用。
MongoDB 資料型別詳解
MongoDB 支援多種資料型別,以滿足不同的資料儲存需求。瞭解這些資料型別對於有效地設計和操作 MongoDB 資料函式庫至關重要。
什麼是資料型別?
資料型別是指用於儲存資料的格式,這些格式能夠被程式語言或資料函式庫所理解。在 MongoDB 中,資料型別決定了資料的意義以及可以對這些資料執行的操作。
BSON 資料型別簡介
BSON(Binary JSON)是一種二進位制格式的 JSON,它支援多種資料型別,包括簡單和複雜的資料結構。MongoDB 使用 BSON 來儲存資料。
MongoDB 中的資料型別
MongoDB 支援多種資料型別,包括:
| 資料型別 | 資料型別編號 | 資料型別別名 |
|---|---|---|
| Double | 1 | “double” |
| String | 2 | “string” |
| Object | 3 | “object” |
| Array | 4 | “array” |
| Binary data | 5 | “binData” |
| ObjectId | 7 | “objectId” |
| Boolean | 8 | “bool” |
| Date | 9 | “date” |
| Null | 10 | “null” |
| Regular Expression | 11 | “regex” |
| JavaScript | 13 | “javascript” |
| JavaScript (with scope) | 15 | “javascriptWithScope” |
| 32-bit integer | 16 | “int” |
| Timestamp | 17 | “timestamp” |
| 64-bit integer | 18 | “long” |
| Decimal128 | 19 | “decimal” |
| Min key | -1 | “minKey” |
| Max key | 127 | “maxKey” |
整數資料型別
整數資料型別用於儲存數值。MongoDB 支援 32 位元或 64 位元整數,取決於 MongoDB 所執行的機器架構。
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "int",
"Data Type Number": "16",
"Data Type Value": 7777
});
字串資料型別
字串資料型別是 MongoDB 中最常用的資料型別之一。為了儲存國際語言中的特殊字元,MongoDB 的驅動程式會在序列化和反序列化過程中將這些字元轉換為 UTF-8 格式。
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "string",
"Data Type Number": "2",
"Data Type Value": "BPB Publications – The Largest Online Resource for IT Books"
});
浮點數資料型別
浮點數資料型別用於儲存帶有小數點的數值。
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "double",
"Data Type Number": "1",
"Data Type Value": 777.27
});
陣列資料型別
陣列資料型別用於儲存一組相似的資料值。
var BPBBookStoresinIndia = ['New Delhi', 'Mumbai', 'Kolkata', 'Chennai'];
var BPBBookStoresinUSA = ['New York', 'Atlanta', 'Arizona', 'New Jersey'];
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "array",
"Data Type Number": "4",
"Data Type Value 1": BPBBookStoresinIndia,
"Data Type Value 2": BPBBookStoresinUSA
});
物件資料型別
物件資料型別用於儲存嵌入式檔案或 JSON 物件。
var BPBBooksLatestEditions = [{
'Title': 'Instant Approach to Software Testing: Principles, Applications, Techniques, and Practices',
'Year': '2019',
'ISBN': '9789388511162',
'Pages': 368,
'Weight': '677gm',
'Dimension': '24x18x2cm'
}, {
'Title': 'IOT and Smart Cities: Your Smart City Planning Guide',
'Year': '2019',
'ISBN': '9789388511322',
'Pages': 242,
'Weight': '357gm',
'Dimension': '22.5x15x1.5gm'
}];
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "object",
"Data Type Number": "3",
"Data Type Value": BPBBooksLatestEditions
});
MongoDB 資料型別應使用案例項
MongoDB 支援多種資料型別,能夠滿足不同的資料儲存需求。本篇文章將探討 MongoDB 中的各種資料型別,並透過實際範例展示如何在 MongoDB 中使用這些資料型別。
物件資料型別(Object Data Type)
物件資料型別允許在檔案中巢狀其他檔案或物件。這種資料型別非常適合用於儲存複雜的結構化資料。
程式碼範例
var BPBBooksObject = {
"title": "MongoDB Essentials",
"author": "BPB Publications"
};
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "object",
"Data Type Number": "3",
"Data Type Value": BPBBooksObject
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "object"
}).pretty();
內容解密:
- 首先,定義了一個名為
BPBBooksObject的物件,包含了書籍的標題和作者資訊。 - 使用
db.BPBOnlineBooksDataTypesCollection.insert()方法將該物件插入到集合中。 - 使用
db.BPBOnlineBooksDataTypesCollection.find()方法查詢並顯示剛才插入的檔案。
二進位資料型別(Binary Data Type)
二進位資料型別用於儲存二進位格式的資料,如 Base64 編碼的圖片或檔案。
程式碼範例
var BPBBooksBinaryData = BinData(1, "SGVsbG8gV29ybGQgRnJvbSBCUEIgUHVibGljYXRpb25z");
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "binData",
"Data Type Number": "5",
"Data Type Value": BPBBooksBinaryData
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "binData"
}).pretty();
內容解密:
- 定義了一個名為
BPBBooksBinaryData的二進位變數,使用BinData()方法建立。 - 將該二進位資料插入到集合中。
- 查詢並顯示包含二進位資料的檔案。
ObjectId 資料型別
ObjectId 是 MongoDB 中用於唯一標識檔案的特殊資料型別。每個檔案都有一個 _id 欄位,其值為 ObjectId。
程式碼範例
var BPBBooksObjectId = ObjectId();
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "objectid",
"Data Type Number": "7",
"Data Type Value": BPBBooksObjectId
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "objectid"
}).pretty();
內容解密:
- 使用
ObjectId()方法建立一個新的 ObjectId。 - 將該 ObjectId 插入到集合中。
- 查詢並顯示包含該 ObjectId 的檔案。
日期資料型別(Date Data Type)
日期資料型別用於儲存日期和時間資訊。MongoDB 提供了多種方法來建立日期物件。
程式碼範例
var BPBBooksDate1 = Date();
var BPBBooksDate2 = new Date();
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "date",
"Data Type Number": "9",
"Data Type Value 1": BPBBooksDate1,
"Date Type Value 2": BPBBooksDate2
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "date"
}).pretty();
內容解密:
- 使用
Date()和new Date()方法建立兩個不同的日期變數。 - 將這兩個日期變數插入到集合中。
- 查詢並顯示包含日期資訊的檔案。
空值資料型別(Null Data Type)
空值資料型別用於表示某個欄位沒有值或尚未定義。
程式碼範例
var BPBBooksNull = null;
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "null",
"Data Type Number": "10",
"Data Type Value": BPBBooksNull
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "null"
}).pretty();
內容解密:
- 定義了一個空值變數
BPBBooksNull。 - 將該空值變數插入到集合中。
- 查詢並顯示包含空值的檔案。
正規表示式資料型別(Regular Expression Data Type)
正規表示式資料型別用於儲存正規表示式模式,用於搜尋、替換和驗證操作。
程式碼範例
var BPBBooksRegEx = RegExp("%BPB");
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "regex",
"Data Type Number": "11",
"Data Type Value": BPBBooksRegEx
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "regex"
}).pretty();
內容解密:
- 使用
RegExp()方法建立一個正規表示式物件。 - 將該正規表示式物件插入到集合中。
- 查詢並顯示包含正規表示式的檔案。
JavaScript 資料型別(無範圍)
MongoDB 支援在檔案中儲存 JavaScript 程式碼,這對於某些特定應用場景非常有用。
程式碼範例
var BPBBooksFunction = "function(){var bpb; bpb=100;}";
var BPBBooksFunctionScope = {};
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "javascript",
"Data Type Number": "13",
"Data Type Value Function": BPBBooksFunction,
"Data Type Value Function Scope": BPBBooksFunctionScope
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "javascript"
}).pretty();
內容解密:
- 定義了一個 JavaScript 程式碼字串和一個空的範圍物件。
- 將這兩個變數插入到集合中。
- 查詢並顯示包含 JavaScript 程式碼的檔案。
JavaScript 資料型別(有範圍)
與無範圍的 JavaScript 資料型別類別似,但此處定義了範圍。
程式碼範例
var BPBBooksFunction = "function(){var bpb; bpb=2000;}";
var BPBBooksFunctionScope = ["object"];
db.BPBOnlineBooksDataTypesCollection.insert({
"Data Type Alias": "javascriptWithScope",
"Data Type Number": "15",
"Data Type Value Function": BPBBooksFunction,
"Data Type Value Function Scope": BPBBooksFunctionScope
});
db.BPBOnlineBooksDataTypesCollection.find({
"Data Type Alias": "javascriptWithScope"
}).pretty();
內容解密:
- 定義了一個 JavaScript 程式碼字串和一個具有特定範圍的物件。
- 將這兩個變數插入到集合中。
- 查詢並顯示包含有範圍 JavaScript 程式碼的檔案。