」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何將 MongoDB 與 Node.js 連結:綜合指南

如何將 MongoDB 與 Node.js 連結:綜合指南

發佈於2024-07-31
瀏覽:541

How to Connect MongoDB with Node.js: A Comprehensive Guide

將 MongoDB 與 Node.js 連接起來是現代 Web 開發人員的關鍵技能。在本指南中,我們將逐步引導您完成整個過程,確保您可以輕鬆整合這些強大的技術。

介紹

MongoDB 是領先的 NoSQL 資料庫,以其靈活性和可擴展性而聞名。您可以使用強大的 JavaScript 運行時 Node.js 建立高效且可擴展的 Web 應用程式。讓我們深入了解無縫連接的步驟。

目錄

  1. 先決條件
  2. 設定 MongoDB
  3. 啟動 Node.js 專案
  4. 使用 Mongoose 連接到 MongoDB
  5. 測試連線
  6. 結論

1. 前提條件

  • JavaScript 和 Node.js 的基本了解。
  • Node.js 和 npm (Node Package Manager) 已安裝在您的系統上。
  • MongoDB 帳戶和本地/遠端 MongoDB 伺服器。

2. 設定MongoDB

首先在您的電腦上安裝 MongoDB 或透過 MongoDB Atlas 設定雲端實例。保存您的連接字串,因為您很快就會需要它。

在 MongoDB Atlas 上設定 MongoDB

2.1 註冊或登入

  • 前往MongoDB Atlas網站:https://www.mongodb.com/cloud/atlas
  • 如果您是 MongoDB Atlas 的新手,請註冊一個新帳戶。否則,請使用您的憑證登入。

2.2 建立新集群

  • 登入後,點選「建立新叢集」按鈕。
  • MongoDB Atlas 提供了一個名為 M0 Sandbox 的免費套餐。對於初學者或小型專案來說,這是一個很好的起點。

2.3 選擇雲端供應商和區域

  • 選擇您的首選雲端供應商(AWS、Google Cloud 或 Azure)。
  • 選擇一個區域。某些區域支援免費套餐,因此請務必選擇最接近您的主要用戶群的區域以減少延遲。

2.4 配置叢集設定

  • 雖然預設設定適用於大多數用例,但您可以根據需要修改叢集的名稱和其他設定。

2.5 新增附加配置(可選)

  • 在其他設定下,您可以設定備份、啟用監控或進行其他進階設定。對於大多數初學者來說,預設設定就足夠了。

2.6 設定網路存取

  • 點選左側面板中的「資料庫存取」部分。
  • 新增具有使用者名稱和強密碼的新使用者。請記住這些憑證,因為您需要它們將應用程式連接到 MongoDB。
  • 在「IP白名單」標籤下,按一下「新增IP位址」。為了安全起見,僅將需要存取的IP列入白名單。出於開發目的,您可以選擇“允許從任何地方訪問”,但出於安全考慮,不建議在生產環境中這樣做。

2.7 取得連接字串

  • 叢集啟動並運行後,按一下「CONNECT」按鈕。
  • 選擇「連接您的應用程式」。
  • 選擇您的驅動程式版本並複製連接字串。這是您將在應用程式中用於連接到 MongoDB 的字串。將連接字串替換為您先前建立的 MongoDB 使用者的密碼。

2.8 連結您的應用程式

  • 在應用程式中使用複製的連接字串開始與 MongoDB 雲端實例互動。

2.9 監控與管理

  • MongoDB Atlas 提供了一個儀表板,您可以在其中監控查詢、效能和其他指標。定期檢查以確保資料庫的運作狀況和效能。

3. 啟動 Node.js 項目

在終端機或命令提示字元中:

mkdir mongo-node-connection
cd mongo-node-connection
npm init -y

上面的程式碼創建了一個新的 Node.js 專案。

4. 使用 Mongoose 連接到 MongoDB

Mongoose 是一個流行的 ODM(物件文件映射器),它促進 Node.js 和 MongoDB 之間的連接。

安裝貓鼬:

npm install mongoose

連接到 MongoDB:

const mongoose = require('mongoose');

// Your MongoDB connection string
const dbURI = 'YOUR_MONGODB_CONNECTION_STRING';

mongoose.connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('Connected to MongoDB'))
  .catch((error) => console.error('Connection error', error));

注意:將 'YOUR_MONGODB_CONNECTION_STRING' 替換為您的實際 MongoDB 連接字串。

5. 測試連接

驗證連線:

  • 使用 Mongoose 建立一個簡單的架構和模型。
  • 將文件插入 MongoDB 集合。
  • 取得文件並將其記錄到控制台。
const testSchema = new mongoose.Schema({
  name: String,
  testField: String
});

const TestModel = mongoose.model('Test', testSchema);

const testData = new TestModel({
  name: 'Node-Mongo Connection Test',
  testField: 'It works!'
});

testData.save()
  .then(doc => {
    console.log('Test document saved:', doc);
  })
  .catch(error => {
    console.error('Error saving test document:', error);
  });

執行 Node.js 腳本,如果一切設定正確,您應該會在控制台中看到記錄的測試文件。

六,結論

將 MongoDB 與 Node.js 連接可以透過提供強大的資料庫解決方案來增強您的 Web 應用程式。透過遵循本指南,您已經使用 Mongoose 設定了基礎連接,為將來更高級的操作和查詢鋪平了道路。

版本聲明 本文轉載於:https://dev.to/suleman_ahmed_rajput/how-to-connect-mongodb-with-nodejs-a-comprehensive-guide-1hga?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 $("#map").css({ margin...
    程式設計 發佈於2025-07-02
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-07-02
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-07-02
  • 在Pandas中如何將年份和季度列合併為一個週期列?
    在Pandas中如何將年份和季度列合併為一個週期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 這個目標是通過組合“年度”和“季度”列來創建一個新列,以獲取以下結果: [python中的concate...
    程式設計 發佈於2025-07-02
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-07-02
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    程式設計 發佈於2025-07-02
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-07-02
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-07-02
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-07-02
  • eval()vs. ast.literal_eval():對於用戶輸入,哪個Python函數更安全?
    eval()vs. ast.literal_eval():對於用戶輸入,哪個Python函數更安全?
    稱量()和ast.literal_eval()中的Python Security 在使用用戶輸入時,必須優先確保安全性。強大的Python功能Eval()通常是作為潛在解決方案而出現的,但擔心其潛在風險。 This article delves into the differences betwee...
    程式設計 發佈於2025-07-02
  • Java字符串非空且非null的有效檢查方法
    Java字符串非空且非null的有效檢查方法
    檢查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。 isement(Isement() trim whitespace whites...
    程式設計 發佈於2025-07-02
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c 的函數時,接受成員函數指針的函數時,必須同時提供對象的指針,並提供指針和指針到函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此)和成員函數指針。這可以通過修改Menubutton :: SetButton()(如下所示:[&& && && &&華)...
    程式設計 發佈於2025-07-02
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-07-02
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-07-02
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    程式設計 發佈於2025-07-02

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

Copyright© 2022 湘ICP备2022001581号-3