Node.js - MongoDB 查詢:初學者指南

你好,未來的 MongoDB 大師!我很興奮能成為你進入 Node.js 和 MongoDB 查詢世界的引路人。作為一個教了多年計算機科學的人,我可以向你保證,儘管這可能一開始看起來令人生畏,但我們會把它分解成小塊,即使是完全的初學者也能夠消化。所以,拿起你喜歡的飲料,舒適地坐好,讓我們一起深入探討!

Node.js - MongoDB Query

了解 MongoDB 和 Node.js

在我們進行查詢之前,讓我們花一會兒時間來了解 MongoDB 和 Node.js 是什麼。可以把 MongoDB 想像成一個巨大、組織有序的文件櫥,你可以在裡面存儲各種信息。另一方面,Node.js 則像是一個能夠與這個文件櫥交談的助手,根據需要检索和修改信息。

配置我們的開發環境

首先,我們需要設置我們的工作空間。別擔心,這比組裝宜家家具還要容易!以下是你要做的:

  1. 從官方網站安裝 Node.js。
  2. 安裝 MongoDB 並啟動 MongoDB 服務器。
  3. 創建一個新的項目文件夹並使用 npm 初始化。
  4. 安裝 Node.js 的 MongoDB 驅動。

以下是一個簡單的代碼片段,讓你開始:

const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'myProject';

MongoClient.connect(url, function(err, client) {
if (err) throw err;
console.log("成功連接到服務器");
const db = client.db(dbName);
// 我們將在這裡寫入我們的查詢
client.close();
});

這段代碼建立了與我們 MongoDB 服務器的連接。把它想像成打開我們文件櫥的門。

MongoDB 運算符:魔法棒

既然我們已經連接上了,讓我們來談談 MongoDB 運算符。這些就像魔法棒一樣,幫助我們在數據庫中找到我們 exactly 想要的東西。讓我們探索一些最常見的運算符:

比較運算符

運算符 描述
$eq 匹配與指定值相等的值
$gt 匹配大於指定值的值
$lt 匹配小於指定值的值
$gte 匹配大於或等於指定值的值
$lte 匹配小於或等於指定值的值
$ne 匹配所有不等於指定值的值
$in 匹配数组中的任何值
$nin 匹配数组中沒有的任何值

讓我們看一些例子:

// 找到所有年齡恰好為 25 歲的文件
db.collection('users').find({ age: { $eq: 25 } }).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

// 找到所有年齡大於 30 歲的文件
db.collection('users').find({ age: { $gt: 30 } }).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

// 找到所有年齡在 [20, 25, 30] 中的文件
db.collection('users').find({ age: { $in: [20, 25, 30] } }).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

在這些例子中,我們使用不同的運算符來根據年齡查找用戶。這就像是我們請求文件櫥給我們滿足特定標準的文件夹。

邏輯運算符

運算符 描述
$and 使用邏輯 AND 連接查詢子句
$or 使用邏輯 OR 連接查詢子句
$not 反轉查詢表達式的效果
$nor 使用邏輯 NOR 連接查詢子句

讓我們看看如何使用它們:

// 找到所有年齡超過 30 歲且職位為 'developer' 的用戶
db.collection('users').find({
$and: [
{ age: { $gt: 30 } },
{ role: 'developer' }
]
}).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

// 找到所有年齡小於 25 歲或超過 60 歲的用戶
db.collection('users').find({
$or: [
{ age: { $lt: 25 } },
{ age: { $gt: 60 } }
]
}).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

這些邏輯運算符讓我們能夠組合多個條件,給我們對查詢提供更精確的控制。

正則表達式:模式匹配器

現在,讓我們來谈谈一些非常酷的東西:正則表達式。正則表達式,簡稱 regex,就像是一個超级增强的搜索功能。它讓我們能在文本數據中搜索特定的模式。

以下是如何在 MongoDB 查詢中使用正則表達式:

// 找到所有名字以 'J' 開頭的用戶
db.collection('users').find({
name: { $regex: '^J' }
}).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

// 找到所有電子郵件地址以 '@gmail.com' 結尾的用戶,不区分大小写
db.collection('users').find({
email: { $regex: '@gmail.com$', $options: 'i' }
}).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

在第一个例子中,^J 意味著 "以 J 開頭"。在第二个例子中,@gmail.com$ 意味著 "以 @gmail.com 結尾",而 'i' 選項使其不区分大小写。

正則表達式非常强大,但也可能相当复杂。記住,力量越大,責任越大(而且偶尔還會有點困惑)!

組合所有知識

現在我們已經學習了不同的運算符和正則表達式,讓我們在更复雜的查詢中組合它們:

db.collection('users').find({
$and: [
{ age: { $gte: 18, $lte: 65 } },
{ email: { $regex: '@gmail.com$', $options: 'i' } },
{ $or: [
{ role: 'developer' },
{ experience: { $gt: 5 } }
]}
]
}).toArray((err, result) => {
if (err) throw err;
console.log(result);
});

這個查詢找到所有滿足以下條件的用戶:

  1. 年齡在 18 歲至 65 歲之間
  2. 拥有 Gmail 電子郵件地址
  3. 要麼是開發者,要麼擁有超過 5 年的經驗

這就像是我們請求文件櫥進行一些真正的表演!

結論

恭喜你!你已經開始踏上了使用 Node.js 進行 MongoDB 查詢的旅程。我們已經涵蓋了很多內容,從基本的比較到复雜的邏輯操作,甚至還有正則表達式模式。記住,就像學習任何新語言一樣,熟能生巧。不要害怕嘗試不同的查詢和運算符的組合。

當我們結束時,我想到一個學生曾經告訴我,學習 MongoDB 查詢就像學習烹飪。起初,你會完全按照菜譜來。但當你變得越來越熟悉時,你會開始嘗試,將不同的風味以新的、令人興奮的方式組合起來。所以,勇往直前,開始烹飪一些美味的查詢吧!

祝你好運,願你的查詢總是返回你所尋找的結果!

Credits: Image by storyset