」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > MongoDB 與 Node.js 整合 – 完整指南

MongoDB 與 Node.js 整合 – 完整指南

發佈於2024-11-07
瀏覽:274

Integração do MongoDB com Node.js – Um Guia Completo

MongoDB 是最受歡迎的 NoSQL 資料庫之一,被開發人員廣泛用於創建可擴展且靈活的應用程式。與廣泛採用的後端開發平台 Node.js 結合使用,您可以建立高效的 API 和強大的應用程式。在這篇文章中,我們將探討如何使用 Node.js 配置 MongoDB,從安裝到執行基本的 CRUD(建立、讀取、更新、刪除)操作。


1.什麼是 MongoDB?

MongoDB 是一個以文件為導向的 NoSQL 資料庫。 MongoDB 不像關聯式資料庫那樣將資料儲存在表中,而是以 JSON 格式儲存文檔,稱為 BSON(二進位 JSON)。這提供了資料建模的靈活性並促進水平可擴展性。

2.為什麼要將 MongoDB 與 Node.js 結合使用?

  • 原生JSON:Node.js使用JavaScript,MongoDB以JSON格式儲存資料。這種組合可以實現平穩高效的整合。
  • 可擴展性:MongoDB 具有高度可擴展性,非常適合需要快速成長的現代應用程式。
  • 效能:MongoDB 憑藉其文件結構,針對快速讀取、寫入和動態查詢進行了最佳化。
  • 社群:MongoDB和Node.js都有活躍的社區,保證資源豐富、更新頻繁。

3.使用 Node.js 配置 MongoDB

第 1 步:安裝 MongoDB

首先,你需要安裝MongoDB。根據您的作業系統,請按照官方 MongoDB 安裝網站上的說明進行操作。

步驟 2:建立 Node.js 項目

為您的專案建立新目錄並啟動 Node.js 專案:

mkdir mongo-node-app
cd mongo-node-app
npm init -y
步驟3:安裝MongoDB驅動

下一步是安裝 Node.js 的官方 MongoDB 驅動程式:

npm install mongodb
第 4 步:連接到 MongoDB

現在,建立一個 index.js 檔案來設定與 MongoDB 的連線。我們將使用 MongoClient 連接到資料庫。

const { MongoClient } = require('mongodb');

async function connectDB() {
    const uri = "mongodb://localhost:27017"; // URL do MongoDB local
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        await client.connect();
        console.log("Conectado ao MongoDB");

        const db = client.db("mydatabase");
        return db;
    } catch (err) {
        console.error("Erro ao conectar ao MongoDB", err);
    } finally {
        // Fechar a conexão
        await client.close();
    }
}

connectDB();

4. MongoDB 的 CRUD 操作

1. 創建

要將文件加入集合中,我們可以使用 insertOne() 或 insertMany() 方法。

async function createDocument(db) {
    const collection = db.collection("users");

    const newUser = {
        name: "Lucas",
        age: 25,
        email: "[email protected]"
    };

    const result = await collection.insertOne(newUser);
    console.log(`Documento inserido com o ID: ${result.insertedId}`);
}
2. 閱讀

要在集合中搜尋文檔,我們使用 find() 或 findOne()。

async function readDocuments(db) {
    const collection = db.collection("users");

    const users = await collection.find({ age: { $gte: 18 } }).toArray();
    console.log(users);
}
3.更新

要更新文檔,我們使用 updateOne() 或 updateMany()。

async function updateDocument(db) {
    const collection = db.collection("users");

    const result = await collection.updateOne(
        { name: "Lucas" },
        { $set: { email: "[email protected]" } }
    );

    console.log(`Documentos atualizados: ${result.modifiedCount}`);
}
4. 刪除

要刪除文檔,我們使用deleteOne()或deleteMany()。

async function deleteDocument(db) {
    const collection = db.collection("users");

    const result = await collection.deleteOne({ name: "Lucas" });
    console.log(`Documentos deletados: ${result.deletedCount}`);
}

5.改善專案架構

對於大型項目,最好將MongoDB連接和CRUD操作模組化。例如,我們可以為每個實體提供單獨的連接模組和專用服務。

模組化連接範例
// db.js
const { MongoClient } = require('mongodb');

const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

async function connectDB() {
    await client.connect();
    const db = client.db("mydatabase");
    return db;
}

module.exports = { connectDB };
使用連接模組
// index.js
const { connectDB } = require('./db');

async function main() {
    const db = await connectDB();

    // Executar operações de CRUD
    await createDocument(db);
    await readDocuments(db);
    await updateDocument(db);
    await deleteDocument(db);
}

main();

6。結論

MongoDB 和 Node.js 形成了強大的組合,用於建立可擴展的 API 和現代 Web 應用程式。透過 MongoDB 的靈活性和 Node.js 的 JavaScript 環境,您可以快速且有效率地操作資料。本指南為將 MongoDB 整合到 Node.js 專案(從初始配置到 CRUD 操作)提供了堅實的基礎。

如果您想更深入地了解該主題,請考慮探索 MongoDB 中的更多功能,例如索引、聚合和複製。


最終提示

  • Mongoose:雖然官方驅動程式很高效,但像 Mongoose 這樣的函式庫提供了更友善的模式和驗證抽象。
  • 可擴展性:考慮在生產中進行分區和複製,以使用 MongoDB 擴展您的應用程式。

我希望本指南對 MongoDB 與 Node.js 的整合有所幫助!

版本聲明 本文轉載於:https://dev.to/lucaspereiradesouzat/integracao-do-mongodb-com-nodejs-um-guia-completo-39mk?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在鼠標單擊時編程選擇DIV中的所有文本?
    如何在鼠標單擊時編程選擇DIV中的所有文本?
    在鼠標上選擇div文本單擊帶有文本內容,用戶如何使用單個鼠標單擊單擊div中的整個文本?這允許用戶輕鬆拖放所選的文本或直接複製它。 在單個鼠標上單擊的div元素中選擇文本,您可以使用以下Javascript函數: function selecttext(canduterid){ if(d...
    程式設計 發佈於2025-05-20
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-05-20
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-05-20
  • Java中假喚醒真的會發生嗎?
    Java中假喚醒真的會發生嗎?
    在Java中的浪費喚醒:真實性或神話? 在Java同步中偽裝喚醒的概念已經是討論的主題。儘管存在這種行為的潛力,但問題仍然存在:它們實際上是在實踐中發生的嗎? Linux的喚醒機制根據Wikipedia關於偽造喚醒的文章,linux實現了pthread_cond_wait()功能的Linux實現,...
    程式設計 發佈於2025-05-20
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-05-20
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-05-20
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-05-20
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-05-20
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-05-20
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-05-20
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案: args)拋出異常{ 日曆cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    程式設計 發佈於2025-05-20
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-05-20
  • 如何實時捕獲和流媒體以進行聊天機器人命令執行?
    如何實時捕獲和流媒體以進行聊天機器人命令執行?
    在開發能夠執行命令的chatbots的領域中,實時從命令執行實時捕獲Stdout,一個常見的需求是能夠檢索和顯示標準輸出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    程式設計 發佈於2025-05-20
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&華儀的函數時,在接受成員函數指針的函數時,要在函數上既要提供指針又可以提供指針和指針到函數的函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此...
    程式設計 發佈於2025-05-20
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-05-20

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3