以下是原文翻译成繁體中文的版本,使用了markdown格式:

MongoDB - Query Document

# MongoDB - 查詢文件

你好啊,未來的數據庫大師!今天,我們將深入MongoDB的精彩世界,學習如何查詢文件。作為你們親切友善的鄰居計算機老師,我將指導你們一步步走過這段旅程。所以,戴上你們的虛擬安全帽,讓我們開始探索吧!

## find() 方法

`find()` 方法就像是MongoDB中的一場寶藏尋找。它幫助我們在集合中搜索文件。想像一下,在你的學校數據庫中有一個名為 "students" 的集合。讓我們看看如何使用 `find()` 來獲取信息。

```javascript
db.students.find()

這行簡單的代碼將返回 "students" 集合中的所有文件。這就像是在問:"給我看所有的學生!"

但如果我们想更具體一點呢?比如我們想找到所有名叫 "John" 的學生:

db.students.find({name: "John"})

這個查詢將返回所有名為 "John" 的字段。這就像是在問:"你能給我看班上所有的John嗎?"

pretty() 方法

現在,讓我們使用 pretty() 方法讓我們的結果看起來整潔有序。這就像給我們的數據來一次時尚變身!

db.students.find().pretty()

這樣會以格式化的方式顯示結果,讓我們更容易閱讀。這就像整理你的亂糟糟的房間——突然之間一切看起來都好多了!

findOne() 方法

有時候,我們只想找到一個文件。這時 findOne() 方法就派上用場了。這就像從樹上摘下第一個蘋果。

db.students.findOne({name: "Sarah"})

這將返回它找到的第一個名為 "Sarah" 的文件。如果有多個Sarah,它只會顯示遇到的第一个。

MongoDB中的RDBMS WHERE子句等效

現在,讓我們將MongoDB的查詢與SQL的WHERE子句進行比較。這就像在兩種語言之間進行翻譯!

SQL WHERE子句 MongoDB等效
WHERE name = "John" {name: "John"}
WHERE age > 25 {age: { $gt: 25 }}
WHERE age >= 25 {age: { $gte: 25 }}
WHERE age < 25 {age: { $lt: 25 }}
WHERE age <= 25 {age: { $lte: 25 }}
WHERE age != 25 {age: { $ne: 25 }}

MongoDB中的AND

在MongoDB中,我們可以使用AND邏輯來組合條件。這就像在說:"我想要這個和那個。"

db.students.find({name: "John", age: 20})

這個查詢將找到所有名為 "John" 且年齡為20歲的文件。

MongoDB中的OR

有時候,我們想要找到符合一個條件或另一個條件的文件。MongoDB為我們提供了支持!

db.students.find({$or: [{name: "John"}, {age: 20}]})

這個查詢將找到所有名為 "John" 或年齡為20歲的文件。

同時使用AND和OR

我們甚至可以將AND和OR條件結合起來使用。這就像創造一張複雜的藏寶地圖!

db.students.find({
  grade: "A",
  $or: [{name: "John"}, {age: 20}]
})

這個查詢將找到所有年級為 "A" 且(名為 "John" 或年齡為20歲)的文件。

MongoDB中的NOR

NOR就像在說"不是這個也不是那個"。它是OR的反義詞。

db.students.find({
  $nor: [{name: "John"}, {age: 20}]
})

這個查詢將找到所有名不是 "John" 且年齡不是20歲的文件。

MongoDB中的NOT

最後,我們有NOT運算符,就像在說"除了這個以外的任何東西"。

db.students.find({
  name: { $not: { $eq: "John" } }
})

這個查詢將找到所有名不是 "John" 的文件。

至此,親愛的學生們!我們已經穿越了MongoDB查詢的土地,從簡單的查找到了複雜的邏輯操作。記住,熟練使人嫻熟,所以不要害怕嘗試這些查詢。誰知道呢?你可能會在數據中發現一些隱藏的寶藏!

在我們結束之前,來個快速的測試。你能寫一個查詢來找到所有18歲的學生或名為 "Emma" 且年級為 "B" 的學生嗎?試試看,並記得使用 pretty() 方法來讓你的結果看起來更加精美!

祝你好運,未來的數據庫大師!

Credits: Image by storyset