MongoDB 作為廣泛應用的 NoSQL 資料函式庫,其檔案更新、刪除和索引操作對於資料管理至關重要。本文將解析 update()、updateOne()、updateMany() 以及 remove()、deleteOne()、deleteMany() 等方法,並探討 upsert、multi 等選項的應用場景。同時,文章還會深入講解 MongoDB 的索引型別,包括單欄位索引、複合索引、多鍵索引等,以及如何建立、使用和管理索引,以提升查詢效能。此外,文章也涵蓋了 MongoDB 的原子性、一致性等進階概念,並闡述索引的限制和最佳實務,幫助讀者更有效地運用 MongoDB。
MongoDB 檔案更新與刪除操作詳解
在 MongoDB 中,更新和刪除檔案是資料函式庫操作中的重要環節。本文將探討 MongoDB 中的更新和刪除方法,包括 update()、updateOne()、updateMany()、remove()、deleteOne() 和 deleteMany() 等。
更新檔案
MongoDB 提供了多種方法來更新檔案,包括 update()、updateOne() 和 updateMany()。
使用 update() 方法更新檔案
update() 方法可用於更新單一或多個檔案,取決於 multi 選項的設定。
var BPBBooksSelectionQuery = {
'Year': '2019'
};
var BPBBooksDatatoUpdate = {
'Publisher': 'BPB Publications'
};
db.BPBOnlineBooksCollection.update(BPBBooksSelectionQuery, {
$set: BPBBooksDatatoUpdate
}, {
multi: true
});
使用 updateOne() 方法更新單一檔案
updateOne() 方法用於更新符合篩選條件的第一個檔案。
var BPBBooksSelectionQuery = {
'Title': 'IOT and Smart Cities: Your Smart City Planning Guide'
};
var BPBBooksDatatoUpdate = {
'Title': 'IOT and Smart Cities',
'Year': '2020'
};
db.BPBOnlineBooksCollection.updateOne(BPBBooksSelectionQuery, {
$set: BPBBooksDatatoUpdate
});
使用 updateMany() 方法更新多個檔案
updateMany() 方法用於更新符合篩選條件的多個檔案。
var BPBBooksSelectionQuery = {
'Year': '2019'
};
var BPBBooksDatatoUpdate = {
'Discount': '10%'
};
db.BPBOnlineBooksCollection.updateMany(BPBBooksSelectionQuery, {
$set: BPBBooksDatatoUpdate
});
upsert 選項
upsert 選項預設為 false。當設定為 true 時,如果沒有符合篩選條件的檔案,將會插入一個新檔案。
multi 選項
multi 選項預設為 false,僅適用於 update() 方法。當設定為 true 時,將會更新多個符合篩選條件的檔案。
刪除檔案
MongoDB 提供了多種方法來刪除檔案,包括 remove()、deleteOne() 和 deleteMany()。
使用 remove() 方法刪除檔案
remove() 方法可用於刪除單一或多個檔案,取決於 justOne 選項的設定。然而,該方法已被棄用,建議使用 deleteOne() 和 deleteMany() 方法。
var BPBBooksSelectionQuery = {
'Year': '2002'
};
db.BPBOnlineBooksCollection.remove(BPBBooksSelectionQuery, {
justOne: true
});
justOne 選項
justOne 選項預設為 false。當設定為 true 時,將只刪除第一個符合篩選條件的檔案。
重點整理
- MongoDB 提供多種方法來更新和刪除檔案。
update()、updateOne()和updateMany()用於更新檔案。remove()、deleteOne()和deleteMany()用於刪除檔案。- 瞭解
upsert、multi和justOne等選項的設定和使用,有助於更靈活地操作資料。
圖表說明
此圖示展示了 MongoDB 更新和刪除操作的流程和相關方法。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title MongoDB 檔案更新刪除與索引操作詳解
package "資料庫架構" {
package "應用層" {
component [連線池] as pool
component [ORM 框架] as orm
}
package "資料庫引擎" {
component [查詢解析器] as parser
component [優化器] as optimizer
component [執行引擎] as executor
}
package "儲存層" {
database [主資料庫] as master
database [讀取副本] as replica
database [快取層] as cache
}
}
pool --> orm : 管理連線
orm --> parser : SQL 查詢
parser --> optimizer : 解析樹
optimizer --> executor : 執行計畫
executor --> master : 寫入操作
executor --> replica : 讀取操作
cache --> executor : 快取命中
master --> replica : 資料同步
note right of cache
Redis/Memcached
減少資料庫負載
end note
@enduml圖表內容解密:
- 此圖表呈現了 MongoDB 中更新和刪除操作的分類別和方法選擇。
- 更新操作包括
update()、updateOne()和updateMany()三種方法,分別用於不同場景下的檔案更新。 - 刪除操作包括
remove()、deleteOne()和deleteMany()三種方法,其中remove()已被棄用,建議使用後兩者。 - 圖表結構清晰地展示了 MongoDB 在資料操作上的功能豐富性和靈活性。
MongoDB CRUD 操作深入解析
MongoDB 提供了多種方法來執行 CRUD(建立、讀取、更新、刪除)操作。這些操作對於資料函式庫的管理和維護至關重要。在本章中,我們將探討 MongoDB 的 CRUD 操作,並學習如何使用不同的 MongoDB 方法來執行這些操作。
刪除檔案
MongoDB 提供了多種方法來刪除檔案,包括 remove()、deleteOne() 和 deleteMany()。
使用 remove() 方法刪除多個檔案
remove() 方法用於刪除 MongoDB 集合中的檔案。該方法可以根據指定的查詢條件刪除一個或多個檔案。
var BPBBooksSelectionQuery = { 'Year': '2020' };
db.BPBOnlineBooksCollection.remove(BPBBooksSelectionQuery);
使用 deleteOne() 方法刪除單個檔案
deleteOne() 方法用於刪除 MongoDB 集合中的單個檔案。該方法根據指定的查詢條件刪除第一個匹配的檔案。
var BPBBooksSelectionQuery = { 'Year': '2020' };
db.BPBOnlineBooksCollection.deleteOne(BPBBooksSelectionQuery);
使用 deleteMany() 方法刪除多個檔案
deleteMany() 方法用於刪除 MongoDB 集合中的多個檔案。該方法根據指定的查詢條件刪除所有匹配的檔案。
var BPBBooksSelectionQuery = { 'Year': '2019' };
db.BPBOnlineBooksCollection.deleteMany(BPBBooksSelectionQuery);
內容解密:
remove()方法:可用於刪除單個或多個檔案,但官方已建議使用deleteOne()和deleteMany()取代。deleteOne()方法:刪除第一個匹配的檔案。deleteMany()方法:刪除所有匹配的檔案。
MongoDB 批次寫入操作
MongoDB 提供了 bulkWrite() 方法來執行批次寫入操作,包括插入、更新和刪除。
bulkWrite() 方法定義
db.collection.bulkWrite(
[<operation 1>, <operation 2>, ... <operation N>],
{ ordered: <boolean> }
)
支援的寫入操作
insertOneupdateOneupdateManyreplaceOnedeleteOnedeleteMany
範例:使用 bulkWrite() 方法執行批次寫入操作
db.BPBOnlineBooksCollection.bulkWrite([
{ insertOne: { "document": { "_id": 4, "Title": "Learn C++", "Year": "2000", "Price": 450 } } },
{ insertOne: { "document": { "_id": 5, "Title": "Mastering Java", "Year": "2005", "Price": 700 } } },
{ updateOne: { "filter": { "Title": "Learn C++" }, "update": { $set: { "Publisher": "BPB Publication" } } } },
{ deleteOne: { "filter": { "Year": "2010" } } },
{ replaceOne: { "filter": { "Title": "Introduction to Python" }, "replacement": { "Title": "Mastering Python", "Year": "2020", "Price": 800 } } }
]);
內容解密:
bulkWrite()方法:用於執行多個寫入操作,包括插入、更新和刪除。ordered引數:控制批次寫入操作的執行順序。若設為true,則遇到錯誤時會停止執行後續操作;若設為false,則會繼續執行後續操作。
問題與討論
- 給出兩個在 MongoDB 中使用的建立檔案方法的範例。
- 什麼是
multi選項?如何使用它?給出範例。 - 給出兩個在 MongoDB 中使用的更新檔案方法的範例。
- 說明欄位更新運算元的用途及其應用場景。
- 給出在 MongoDB 中執行批次寫入操作的範例。
本章重點:
- MongoDB CRUD 操作的基本概念
- 使用不同方法執行 CRUD 操作
bulkWrite()方法的應用- 欄位更新運算元的使用
本章內容全面介紹了 MongoDB 的 CRUD 操作和批次寫入操作,為讀者提供了深入的理解和實務操作的基礎。接下來的章節將繼續探討 MongoDB 的進階主題,包括原子性、一致性、分散式操作、查詢計劃和效能分析等。
MongoDB 中階概念解析
原子性(Atomicity)解析
在探討 MongoDB 的原子性之前,我們先來瞭解什麼是資料函式倉管理系統中的原子性。原子性是指在資料函式庫交易中,所有操作要麼全部成功,要麼全部失敗,不會出現部分成功、部分失敗的情況。這確保了資料函式庫的完整性。
MongoDB 中的原子性
MongoDB 支援單一檔案級別的原子性。也就是說,當更新一個包含數百個欄位的檔案時,要麼所有欄位都被更新,要麼都不更新。這確保了單一檔案的資料一致性。
db.collection.updateOne(
{ _id: "documentId" },
{ $set: { field1: "value1", field2: "value2" } }
)
內容解密:
updateOne方法用於更新單一檔案。$set運算子用於設定欄位的值。- 這種操作是原子性的,確保要麼所有指定的欄位都被更新,要麼都不更新。
多檔案交易與原子性
MongoDB 不支援多檔案交易的原子性。例如,使用 updateMany 方法更新多個檔案時,每個檔案的更新是原子性的,但整體操作不是。
db.collection.updateMany(
{ condition: "value" },
{ $set: { field: "newValue" } }
)
內容解密:
updateMany方法用於更新多個符合條件的檔案。- 每個檔案的更新是原子性的,但如果操作中途失敗,已更新的檔案不會回復。
一致性(Consistency)解析
一致性是指資料函式庫在交易過程中保持一致狀態的特性。無論交易是否成功,資料函式庫都不會處於不一致的狀態。
MongoDB 中的一致性
MongoDB 預設支援一致性。在複本集(Replica Set)中,主節點(Primary)的一致性是保證的。從節點(Secondary)預設為最終一致性。
最終一致性
最終一致性模型保證,如果沒有新的更新,所有的存取都會傳回最後的更新值。
複製(Replication)簡介
複製是指在多台伺服器上維護相同資料集的過程,以確保資料的冗餘和高用性。
複本集(Replica Sets)
複本集是一組維護相同資料集的 MongoDB 例項。它們提供容錯移轉和提高讀取效能的能力。
分片(Sharding)簡介
分片是指將大規模資料分佈到多台機器上的過程,以提高資料處理能力和儲存容量。
為什麼需要分片?
當資料量過大,單一機器無法負載時,分片可以將資料分佈到多台機器上,提高整體效能。
MongoDB 索引介紹
在前一章中,我們討論了中階主題,如 MongoDB 中的原子性和一致性。我們也介紹了複製和分片的基本概念及其用途。本章將探討索引的概念。在本章中,我們將從索引的介紹及其好處開始,學習索引是一種特殊的資料結構,能夠以易於遍歷的形式儲存資料。我們還將介紹 MongoDB 預設的 _id 索引,並瞭解其屬性。接著,我們將學習如何在 MongoDB 中建立索引。稍後在本章中,我們將研究可以在 MongoDB 中建立的不同型別的索引,並提供逐步的實際範例。我們還將研究在 MongoDB 中建立索引時可以使用的一些不同索引屬性。我們還將瞭解如何將索引與其他 MongoDB 方法結合使用。最後,我們將介紹如何在 MongoDB 中檢視現有的索引以及如何刪除現有的索引。此外,我們還將瞭解 MongoDB 索引中的一些限制。
本章結構
在本章中,我們將討論以下主題:
- 索引是什麼?
- 預設
_id索引 - 建立索引
- MongoDB 中的索引型別
- 索引屬性
索引是什麼?
在資料函式倉管理系統中,索引是一種特殊的資料結構,能夠以易於遍歷的形式儲存資料。這使得查詢操作更加高效,因為資料函式庫可以直接存取所需的資料,而無需掃描整個集合。
索引的好處
- 提高查詢效能:索引可以大幅減少查詢所需的時間,特別是在大型資料集合中。
- 加速排序和分組操作:索引可以幫助資料函式庫更快地對資料進行排序和分組。
預設 _id 索引
在 MongoDB 中,每個集合都有一個預設的 _id 索引。這個索引是唯一的,用於確保每個檔案在集合中都有一個唯一的識別符號。
_id 索引的屬性
- 唯一性:
_id索引確保每個檔案都有一個唯一的值。 - 自動建立:MongoDB 自動為每個集合建立
_id索引。
建立索引
除了預設的 _id 索引外,您還可以在 MongoDB 中建立自定義索引。這可以根據您的查詢需求來完成,以提高查詢效能。
如何建立索引
db.collection.createIndex({ field: 1 });
內容解密:
db.collection.createIndex():用於在指定集合上建立索引的方法。{ field: 1 }:指定要建立索引的欄位。其中1表示升序索引,-1表示降序索引。
MongoDB 中的索引型別
MongoDB 支援多種不同型別的索引,以滿足不同的查詢需求。
常見的索引型別
- 單一欄位索引:對單一欄位建立索引。
- 複合索引:對多個欄位建立索引。
- 多鍵索引:對陣列欄位建立索引。
- 文字索引:對文字欄位建立索引,以支援全文搜尋。
- 地理空間索引:對地理空間資料建立索引,以支援地理空間查詢。
索引屬性
在建立索引時,您可以指定一些屬性來控制索引的行為。
常見的索引屬性
unique:確保索引的唯一性。sparse:只對存在指定欄位的檔案建立索引。partialFilterExpression:根據指定的篩選條件建立部分索引。
問題
- 什麼是資料函式倉管理系統中的索引?
- MongoDB 中的預設
_id索引有什麼作用? - 如何在 MongoDB 中建立自定義索引?
- MongoDB 中有哪些不同型別的索引?
- 如何使用索引屬性來控制索引行為?
MongoDB 索引詳解
索引的重要性與基本概念
在 MongoDB 中,索引是一種特殊的資料結構,能夠有效地儲存並管理資料,使查詢更為快速。索引通常與 MongoDB 檔案中的特定欄位相關聯,可以針對單一欄位或多個欄位建立索引,以提高查詢效率。
索引的作用
索引在 MongoDB 的查詢效能上扮演著至關重要的角色。適當的索引可以大幅提升應用程式的效能。當集合中沒有建立索引時,MongoDB 的查詢需要掃描整個集合中的所有檔案,以匹配查詢條件。相反,當集合中存在適當的索引時,查詢可以根據索引快速定位到相關檔案,從而避免掃描整個集合。
MongoDB 中的索引特點
- 集合層級的索引定義:MongoDB 支援在集合層級上定義索引。
- 支援多樣化的索引欄位:可以對任意欄位或子欄位建立索引。
- 預設的
_id索引:當建立集合時,MongoDB 會自動為_id欄位建立索引。
_id 索引的特性
- 自動建立:當在 MongoDB 中建立集合時,會自動為
_id欄位建立索引。 - 唯一性:每個檔案在
_id欄位上的值都是唯一的。 _id欄位的資料型別:除了陣列以外,_id可以是任何 BSON 資料型別。- 不可刪除:MongoDB 不允許刪除
_id索引。
ObjectId 的結構
ObjectId 是一種特殊的 MongoDB 資料型別,用於儲存唯一的鍵值 ID。它由 12 個位元組組成,分為四個部分:
| 部分名稱 | 大小(位元組) |
|---|---|
| Timestamp | 4 |
| Machine Id | 3 |
| Process Id | 2 |
| Counter | 3 |
建立與管理索引
建立範例資料集
首先,我們建立一個名為 BPBBooksBestSellingEditionsWithIndex 的變數,並填充相關資料。
var BPBBooksBestSellingEditionsWithIndex = [{
'Title': 'Cloud Computing',
'Year': '2019',
'ISBN': '9789388511407',
'Pages': 330,
'Weight': '570gm',
'Dimension': '23x19x1.5cm',
'Tags': ['Cloud Computing', 'Cloud Computing Concepts', 'Non Programming'],
'InStock': [{
'Type': 'Paperback',
'Quantity': 3000
},
{
'Type': 'Hardcover',
'Quantity': 1500
}
],
'SpecialOfferDiscount': '100'
}, {
// ... 其他資料
}];
索引的建立與使用
後續章節將介紹如何在 MongoDB 中建立索引、瞭解不同型別的索引、以及如何利用索引最佳化查詢效能。
索引限制
MongoDB 對索引有一些限制,瞭解這些限制對於有效地使用索引至關重要。
主要限制
- 索引數量限制:每個集合最多可以有 64 個索引。
- 索引鍵長度限制:索引鍵的總長度有限制,超過此限制的索引鍵將無法建立。