Node.js MongoDB บทช่วยสอนพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

Node.js MongoDB การผสานรวมนี้ช่วยให้แอปพลิเคชัน Node สามารถเชื่อมต่อกับฐานข้อมูล NoSQL ดำเนินการ CRUD และแสดงข้อมูลแบบเรียลไทม์ผ่านเส้นทาง Express โดยใช้ไดรเวอร์ mongodb ดั้งเดิมร่วมกับ Mongoose สำหรับการสร้างแบบจำลองข้อมูลตามสคีมา

  • 🗄️ ตัวเลือกฐานข้อมูล: Node.js เชื่อมต่อกับฐานข้อมูลเชิงสัมพันธ์ เช่น MySQL และเอนจิ้น NoSQL เช่น MongoDB ผ่านโมดูล npm เฉพาะทาง
  • 📦 การตั้งค่าไดรเวอร์: เรียกใช้คำสั่ง `npm install mongodb` เพื่อเพิ่มไดรเวอร์ MongoClient ดั้งเดิมลงในโปรเจ็กต์ Node.js
  • 🔌 การเชื่อมต่อ: เปิดการเชื่อมต่อฐานข้อมูลด้วย MongoClient.connect และฟังก์ชันเรียกกลับ หรือรูปแบบ async/await client.connect() ที่ทันสมัยกว่า
  • 🔍 การอ่านข้อมูล: ใช้ find() และเคอร์เซอร์เพื่อวนลูปผ่านเอกสารทุกฉบับภายใน MongoDB การเก็บ
  • 🇧🇷 กำลังเขียนข้อมูล: ใช้ฟังก์ชัน insertOne, updateOne และ deleteOne เพื่อเพิ่ม แก้ไข และลบเอกสารอย่างปลอดภัย
  • 🧩 ไดรเวอร์ vs ODM: เลือกใช้ไดรเวอร์ MongoDB ที่มีน้ำหนักเบาสำหรับการสืบค้นข้อมูลดิบ หรือเลือกใช้ Mongoose เมื่อการตรวจสอบความถูกต้องของ Schema มีความสำคัญ
  • 🌐 การผสานรวมแบบด่วน: จับคู่เส้นทางด่วนกับ MongoDB การสืบค้นเพื่อให้คำขอจากเบราว์เซอร์ส่งคืนข้อมูลจากฐานข้อมูลแบบเรียลไทม์

โดยส่วนใหญ่แล้ว แอปพลิเคชันบนเว็บในปัจจุบันจะมีระบบจัดเก็บข้อมูลอยู่เบื้องหลัง ตัวอย่างเช่น หากพิจารณาร้านค้าออนไลน์ping ในแอปพลิเคชัน ข้อมูลต่างๆ เช่น ราคาของสินค้า จะถูกจัดเก็บไว้ในฐานข้อมูล

กรอบงาน Node js สามารถทำงานกับฐานข้อมูลที่มีทั้งเชิงสัมพันธ์ (เช่น Oracle และ MS SQL Server) และฐานข้อมูลที่ไม่เกี่ยวข้อง (เช่น MongoDB- ในบทช่วยสอนนี้ เราจะดูว่าเราสามารถใช้ฐานข้อมูลจากภายในแอปพลิเคชัน Node js ได้อย่างไร

Node.js และฐานข้อมูล NoSQL

ตลอดหลายปีที่ผ่านมา ฐานข้อมูล NoSQL เช่น MongoDB และฐานข้อมูลเชิงสัมพันธ์ เช่น MySQL ฐานข้อมูลได้รับความนิยมอย่างมากในการจัดเก็บข้อมูล ความสามารถของฐานข้อมูลเหล่านี้ในการจัดเก็บข้อมูลทุกประเภท โดยเฉพาะอย่างยิ่งในรูปแบบใดก็ได้ คือสิ่งที่ทำให้ฐานข้อมูลเหล่านี้ถูกใช้งานอย่างแพร่หลาย

Node.js มีความสามารถในการทำงานร่วมกับทั้งสองอย่าง MySQL และ MongoDB เป็นฐานข้อมูล ในการใช้ฐานข้อมูลใดฐานข้อมูลหนึ่งเหล่านี้ คุณจะต้องดาวน์โหลดและใช้โมดูลที่จำเป็นโดยใช้ Node package manager

ใช้เพื่อการ MySQLโมดูลที่ต้องการคือ “mysql” MongoDBนักพัฒนาสามารถติดตั้งเวอร์ชันดั้งเดิมอย่างเป็นทางการได้ MongoDB driver ซึ่งเป็นแพ็กเกจที่ใช้ในตัวอย่างโค้ดทั้งหมดในบทความนี้ หรือไลบรารีแบบใช้สคีมา เช่น พังพอน เมื่อแอปพลิเคชันต้องการโครงสร้างที่ชัดเจนมากขึ้น

ด้วยโมดูลเหล่านี้ คุณสามารถดำเนินการต่อไปนี้ใน Node.js ได้

  1. จัดการการรวมการเชื่อมต่อ – ที่นี่คุณสามารถระบุจำนวนการเชื่อมต่อได้ MySQL การเชื่อมต่อฐานข้อมูลที่ควรดูแลรักษาและบันทึกโดย Node.js
  2. สร้างและปิดการเชื่อมต่อกับฐานข้อมูล ไม่ว่าในกรณีใด คุณสามารถจัดให้มีฟังก์ชันการโทรกลับซึ่งสามารถเรียกเมื่อใดก็ตามที่ดำเนินการวิธีการเชื่อมต่อ "สร้าง" และ "ปิด"
  3. สามารถดำเนินการสืบค้นเพื่อรับข้อมูลจากฐานข้อมูลที่เกี่ยวข้องเพื่อดึงข้อมูล
  4. การจัดการข้อมูล เช่น การแทรกข้อมูล การลบ และการอัปเดตข้อมูล สามารถทำได้ด้วยโมดูลเหล่านี้

สำหรับหัวข้อที่เหลือ เราจะมาดูกันว่าเราจะทำงานร่วมกับมันได้อย่างไร MongoDB ฐานข้อมูลภายใน Node.jsโดยเริ่มจากการเปรียบเทียบอย่างรวดเร็วระหว่างสองวิธีที่พบบ่อยที่สุดในการพูดคุยกับ MongoDB จากโปรเจ็กต์ Node.js

MongoDB Native Driver กับ Mongoose ใน Node.js

ชื่อโมดูลที่กล่าวถึงข้างต้นอาจทำให้สับสนได้ เนื่องจาก Node.js มีวิธีการสื่อสารอยู่สองวิธีที่แตกต่างกัน MongoDB: ชาวพื้นเมือง MongoDB คนขับและ พังพอน ODM (ไลบรารีการสร้างแบบจำลองข้อมูลเชิงวัตถุ) ตัวอย่างโค้ดทั้งหมดในบทความนี้ใช้ไดรเวอร์ดั้งเดิมที่ติดตั้งมาพร้อมกับระบบ npm ติดตั้ง mongodb และสามารถเข้าถึงได้ผ่านทาง มงโกไคลเอนต์Mongoose ห่อหุ้มไดรเวอร์ตัวเดียวกันนั้นและเพิ่มคำจำกัดความของสคีมา การตรวจสอบความถูกต้อง และเมธอดโมเดลที่นำกลับมาใช้ใหม่ได้ ซึ่งเหมาะสำหรับแอปพลิเคชันขนาดใหญ่ที่ต้องการโครงสร้างข้อมูลที่คาดเดาได้ในหลายๆ คอลเลกชัน การทำความเข้าใจความแตกต่างตั้งแต่เริ่มต้นจะช่วยหลีกเลี่ยงความสับสนเมื่อติดตั้งแพ็กเกจหรืออ่านเอกสาร Node.js อื่นๆ MongoDB ตัวอย่างออนไลน์ ตารางด้านล่างเปรียบเทียบทั้งสองตัวเลือก เพื่อให้นักพัฒนาสามารถเลือกเครื่องมือที่เหมาะสมสำหรับโครงการนั้นๆ ได้

แง่มุม ไดรเวอร์ MongoDB ดั้งเดิม พังพอน
การติดตั้ง npm ติดตั้ง mongodb ติดตั้ง mongoose ด้วยคำสั่ง npm
การบังคับใช้โครงร่าง ไม่มี เอกสารยังคงมีความยืดหยุ่น กำหนดผ่านอ็อบเจ็กต์ Schema
โค้งการเรียนรู้ ต่ำกว่า ใกล้เคียงกับวัตถุดิบดิบ MongoDB คำสั่ง ระดับสูงขึ้น เพิ่มเลเยอร์ API ของตัวเองเข้าไป
เหมาะสำหรับ สคริปต์ขนาดเล็กและโค้ดที่คำนึงถึงประสิทธิภาพ แอปพลิเคชันขนาดใหญ่ที่มีโมเดลข้อมูลที่สอดคล้องกัน

เคล็ดลับ: ขณะเรียนรู้แกนหลัก ให้ใช้ไดรเวอร์ดั้งเดิมต่อไป MongoDB คำสั่ง จากนั้นจึงย้ายไปยัง พังพอน เมื่อแอปพลิเคชันต้องการตรวจสอบความถูกต้องของสคีมาในหลายคอลเลกชัน

การใช้ MongoDB และ Node.js

เมื่อได้ชี้แจงคำศัพท์แล้ว ส่วนที่เหลือของบทความนี้จะใช้ไดรเวอร์ดั้งเดิมเท่านั้น ตามที่ปรากฏในตัวอย่างโค้ดด้านล่างทุกประการ ดังที่ได้กล่าวไว้ในหัวข้อก่อนหน้านี้ MongoDB เป็นหนึ่งในฐานข้อมูลยอดนิยมที่ใช้คู่กับ Node.js

ในบทนี้ เราจะมาดูกันว่าวิธีการสร้างความสัมพันธ์กับ... MongoDB ฐานข้อมูล และวิธีการดำเนินการตามปกติในการอ่านข้อมูลจากฐานข้อมูล รวมถึงการแทรก ลบ และอัปเดตระเบียนในฐานข้อมูล MongoDB ฐานข้อมูล

สำหรับวัตถุประสงค์ของบทนี้ สมมติว่าเรามีข้อมูลด้านล่างนี้ MongoDB ข้อมูลในสถานที่

ชื่อฐานข้อมูล: EmployeeDB

ชื่อคอลเลกชัน: พนักงาน

Documents
{
	{Employeeid : 1, Employee Name : Guru99},
	{Employeeid : 2, Employee Name : Joe},
	{Employeeid : 3, Employee Name : Martin},
}
  1. การติดตั้งโมดูล NPM

คุณต้องมีไดรเวอร์เพื่อเข้าถึง Mongo จากภายในแอปพลิเคชัน Node มีไดรเวอร์ Mongo จำนวนมากให้เลือก MongoDB เป็นหนึ่งในความนิยมมากที่สุด หากต้องการติดตั้ง MongoDB โมดูลให้รันคำสั่งด้านล่าง

npm ติดตั้ง mongodb

  1. การสร้างและปิดการเชื่อมต่อกับ MongoDB ฐานข้อมูล ข้อมูลโค้ดด้านล่างแสดงวิธีการสร้างและปิดการเชื่อมต่อกับ MongoDB ฐานข้อมูล

Code คำอธิบาย:

  1. ขั้นตอนแรกคือการรวม MongoDB โมดูลไดรเวอร์นั้นสร้างขึ้นโดยใช้ฟังก์ชัน `require` เมื่อโมดูลนี้ถูกติดตั้งแล้ว เราสามารถใช้ฟังก์ชันที่จำเป็นที่มีอยู่ในโมดูลนี้เพื่อสร้างการเชื่อมต่อกับฐานข้อมูลได้
  2. ต่อไปเราระบุสตริงการเชื่อมต่อกับฐานข้อมูล ในสตริงการเชื่อมต่อ มีค่าคีย์ 3 ค่าที่ถูกส่งผ่าน
  • ส่วนแรกคือ 'mongodb' ซึ่งระบุว่าเรากำลังเชื่อมต่อกับฐานข้อมูล mongoDB
  • ถัดไปคือ 'localhost' ซึ่งหมายความว่าเรากำลังเชื่อมต่อกับฐานข้อมูลบนเครื่องท้องถิ่น
  • ถัดไปคือ 'EmployeeDB' ซึ่งเป็นชื่อของฐานข้อมูลที่เรากำหนดไว้ MongoDB ฐานข้อมูล
  1. ขั้นตอนต่อไปคือการเชื่อมต่อกับฐานข้อมูลของเรา ฟังก์ชัน `connect` รับพารามิเตอร์ของเรา URL และมีฟังก์ชันให้ระบุฟังก์ชันเรียกกลับ (callback function) ซึ่งจะถูกเรียกเมื่อมีการเปิดการเชื่อมต่อกับฐานข้อมูล ทำให้เราทราบได้ว่าการเชื่อมต่อกับฐานข้อมูลสำเร็จหรือไม่
  2. ในฟังก์ชันนี้ เรากำลังเขียนสตริง "สร้างการเชื่อมต่อ" ลงในคอนโซลเพื่อระบุว่ามีการสร้างการเชื่อมต่อที่สำเร็จ
  3. สุดท้ายนี้ เรากำลังปิดการเชื่อมต่อโดยใช้คำสั่ง db.close

หากโค้ดด้านบนทำงานอย่างถูกต้อง สตริง “เชื่อมต่อแล้ว” จะถูกเขียนลงในคอนโซลดังที่แสดงด้านล่าง

  1. การสืบค้นข้อมูลใน MongoDB ฐานข้อมูล - ใช้ MongoDB ไดรเวอร์ที่เรายังสามารถดึงข้อมูลจาก MongoDB ฐานข้อมูล ส่วนด้านล่างนี้จะแสดงวิธีการใช้ไดรเวอร์เพื่อดึงเอกสารทั้งหมดจากคอลเลกชันพนักงานในฐานข้อมูล EmployeeDB ของเรา นี่คือคอลเลกชันในฐานข้อมูลของเรา MongoDB ฐานข้อมูลซึ่งประกอบด้วยเอกสารที่เกี่ยวข้องกับพนักงานทั้งหมด แต่ละเอกสารมีรหัสออบเจ็กต์ ชื่อพนักงาน และรหัสพนักงานเพื่อกำหนดค่าของเอกสาร

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

var cursor = db.collection('Employee').find();

cursor.each(function(err, doc) {

console.log(doc);

});
});

Code คำอธิบาย:

  1. ขั้นตอนแรก เราจะสร้างเคอร์เซอร์ (เคอร์เซอร์คือตัวชี้ที่ใช้ชี้ไปยังเรคอร์ดต่างๆ ที่ดึงมาจากฐานข้อมูล จากนั้นจะใช้เคอร์เซอร์ในการวนซ้ำผ่านเรคอร์ดต่างๆ ในฐานข้อมูล ในที่นี้เรากำหนดตัวแปรชื่อ cursor ซึ่งจะใช้เก็บตัวชี้ไปยังเรคอร์ดที่ดึงมาจากฐานข้อมูล) ซึ่งชี้ไปยังเรคอร์ดที่ดึงมาจากคอลเลกชัน MongoDB นอกจากนี้เรายังสามารถระบุคอลเลกชัน 'Employee' ที่ต้องการดึงเรคอร์ดได้อีกด้วย ฟังก์ชัน find() ใช้เพื่อระบุว่าเราต้องการดึงเอกสารทั้งหมดจากคอลเลกชันนั้น MongoDB การเก็บ
  2. ตอนนี้เรากำลังวนซ้ำผ่านเคอร์เซอร์ของเรา และสำหรับแต่ละเอกสารในเคอร์เซอร์ เราจะเรียกใช้ฟังก์ชัน
  3. ฟังก์ชั่นของเราคือเพียงพิมพ์เนื้อหาของแต่ละเอกสารไปยังคอนโซล

บันทึก: - นอกจากนี้ยังสามารถดึงข้อมูลเฉพาะจากฐานข้อมูลได้ โดยการระบุเงื่อนไขการค้นหาในฟังก์ชัน find() ตัวอย่างเช่น สมมติว่าคุณต้องการดึงข้อมูลที่มีชื่อพนักงานดังนี้ Guru99 ดังนั้นข้อความนี้สามารถเขียนได้ดังนี้

var cursor=db.collection('Employee').find({EmployeeName: "guru99"})

หากโค้ดด้านบนถูกดำเนินการสำเร็จ ผลลัพธ์ต่อไปนี้จะปรากฏในคอนโซลของคุณ

Output:

จากผลลัพธ์ที่ได้

  • คุณจะสามารถเห็นได้ชัดเจนว่าเอกสารทั้งหมดจากคอลเล็กชันถูกเรียกค้นมาได้ ซึ่งทำได้โดยใช้เมธอด find() ของการเชื่อมต่อ mongoDB (db) และวนซ้ำผ่านเอกสารทั้งหมดโดยใช้เคอร์เซอร์
  1. การแทรกเอกสารในคอลเลกชัน – สามารถแทรกเอกสารลงในคอลเลกชันได้โดยใช้วิธี insertOne ที่จัดทำโดย MongoDB ไลบรารี ตัวอย่างโค้ดด้านล่างนี้แสดงให้เห็นวิธีการแทรกเอกสารเข้าในคอลเล็กชั่น MongoDB

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

db.collection('Employee').insertOne({
Employeeid: 4,
EmployeeName: "NewEmployee"
});
});

Code คำอธิบาย:

  1. ที่นี่เราใช้วิธี insertOne จาก MongoDB ไลบรารีเพื่อแทรกเอกสารลงในคอลเลกชันพนักงาน
  2. เรากำลังระบุรายละเอียดเอกสารว่าจะต้องแทรกอะไรเข้าไปในคอลเลกชันพนักงาน

หากคุณตรวจสอบเนื้อหาของคุณแล้ว MongoDB ฐานข้อมูล คุณจะพบบันทึกที่มี Employeeid ของ 4 และ EmployeeName ของ "NewEmployee" แทรกอยู่ในคอลเลกชันของพนักงาน

หมายเหตุ คอนโซลจะไม่แสดงผลลัพธ์ใดๆ เนื่องจากบันทึกถูกแทรกลงในฐานข้อมูล และไม่สามารถแสดงเอาต์พุตได้ที่นี่

เพื่อตรวจสอบว่าข้อมูลได้รับการแทรกลงในฐานข้อมูลอย่างถูกต้องแล้ว คุณจำเป็นต้องดำเนินการคำสั่งต่อไปนี้ MongoDB

  1. ใช้ EmployeeDB
  2. db.Employee.find({รหัสพนักงาน :4 })

คำสั่งแรกช่วยให้แน่ใจว่าคุณเชื่อมต่อกับฐานข้อมูล EmployeeDb คำสั่งที่สองค้นหาเรกคอร์ดซึ่งมีรหัสพนักงานเป็น 4

  1. การอัพเดตเอกสารในคอลเลกชัน – สามารถอัปเดตเอกสารในคอลเลกชันได้โดยใช้วิธี updateOne ที่จัดทำโดย MongoDB ไลบรารี ตัวอย่างโค้ดด้านล่างนี้แสดงวิธีการอัปเดตเอกสารในคอลเล็กชั่น MongoDB

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

db.collection('Employee').updateOne({
"EmployeeName": "NewEmployee"
}, {
$set: {
"EmployeeName": "Mohan"
}
});
});

Code คำอธิบาย:

  1. ที่นี่เราใช้วิธี "updateOne" จาก MongoDB ไลบรารีซึ่งใช้เพื่ออัปเดตเอกสารในคอลเล็กชั่นของ MongoDB
  2. เรากำลังระบุเกณฑ์การค้นหาว่าเอกสารใดจำเป็นต้องได้รับการอัปเดต ในกรณีของเรา เราต้องการค้นหาเอกสารที่มีชื่อพนักงานเป็น “NewEmployee”
  3. จากนั้นเราต้องการตั้งค่าของ EmployeeName ของเอกสารจาก "NewEmployee" เป็น "Mohan"

หากคุณตรวจสอบเนื้อหาของคุณแล้ว MongoDB ฐานข้อมูล คุณจะพบบันทึกที่มี Employeeid ของ 4 และ EmployeeName ของ “Mohan” ที่อัปเดตในคอลเลกชันของพนักงาน

เพื่อตรวจสอบว่าข้อมูลได้รับการอัพเดทในฐานข้อมูลอย่างถูกต้อง คุณจำเป็นต้องดำเนินการคำสั่งต่อไปนี้ MongoDB

  1. ใช้ EmployeeDB
  2. db.Employee.find({รหัสพนักงาน :4 })

คำสั่งแรกช่วยให้แน่ใจว่าคุณเชื่อมต่อกับฐานข้อมูล EmployeeDb คำสั่งที่สองค้นหาเรกคอร์ดซึ่งมีรหัสพนักงานเป็น 4

  1. การลบเอกสารในคอลเลกชัน – สามารถลบเอกสารในคอลเลกชันได้โดยใช้วิธี “deleteOne” ที่จัดทำโดย MongoDB ไลบรารี ตัวอย่างโค้ดด้านล่างนี้แสดงวิธีการลบเอกสารในคอลเล็กชั่น MongoDB

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

db.collection('Employee').deleteOne(

{
"EmployeeName": "Mohan"
}

);
});

Code คำอธิบาย:

  1. ที่นี่เราใช้วิธี "deleteOne" จาก MongoDB ไลบรารีซึ่งใช้ในการลบเอกสารในคอลเล็กชั่นของ MongoDB
  2. เรากำลังระบุเกณฑ์การค้นหาที่ต้องลบเอกสาร ในกรณีของเรา เราต้องการค้นหาเอกสารที่มีชื่อพนักงานเป็น “Mohan” และลบเอกสารนี้

หากคุณตรวจสอบเนื้อหาของคุณแล้ว MongoDB คุณจะพบบันทึกที่มี Employeeid ของ 4 และ EmployeeName ของ “Mohan” ที่ถูกลบออกจากคอลเลกชันของพนักงาน

เพื่อตรวจสอบว่าข้อมูลได้รับการอัพเดทในฐานข้อมูลอย่างถูกต้อง คุณจำเป็นต้องดำเนินการคำสั่งต่อไปนี้ MongoDB

  1. ใช้ EmployeeDB
  2. db.พนักงาน.find()

คำสั่งแรกช่วยให้แน่ใจว่าคุณเชื่อมต่อกับฐานข้อมูล EmployeeDb คำสั่งที่สองค้นหาและแสดงเรกคอร์ดทั้งหมดในคอลเลกชันของพนักงาน ที่นี่คุณสามารถดูได้ว่าบันทึกถูกลบไปแล้วหรือไม่

Async/Await สมัยใหม่ MongoDB การเชื่อมต่อใน Node.js

การขอ MongoClient.connect(url, callback) รูปแบบที่ใช้ตลอดทั้งบทความนี้ตรงกับ MongoDB เวอร์ชันไดรเวอร์ Node.js ที่ใช้ในขณะที่เขียนตัวอย่างข้างต้นนั้น ไดรเวอร์เวอร์ชันล่าสุดยังคงรองรับรูปแบบการเรียกกลับแบบนั้นอยู่ แต่โครงการใหม่ส่วนใหญ่ในปัจจุบันนิยมใช้ Promise และ async/await มากกว่า เพราะโค้ดที่ได้จะอ่านง่ายจากบนลงล่างโดยไม่มีการเรียกกลับซ้อนกัน ขั้นตอนด้านล่างนี้จะเขียนการเชื่อมต่อพนักงานแบบเดียวกันใหม่โดยใช้ไวยากรณ์ที่ทันสมัยกว่า

  1. สร้างอินสแตนซ์ MongoClient เพียงหนึ่งเดียวภายนอกฟังก์ชันใดๆ โดยส่งสตริงการเชื่อมต่อเพียงครั้งเดียว ตัวอย่างเช่น const client = new MongoClient(url);
  2. โทร await client.connect() ใช้ฟังก์ชันอะซิงโครนัสเพื่อเปิดการเชื่อมต่อแทนการส่งฟังก์ชันเรียกกลับ (callback)
  3. รับฐานข้อมูลด้วย client.db('EmployeeDB') แทนที่จะพึ่งพาอ็อบเจ็กต์ที่ส่งคืนภายในฟังก์ชันเรียกกลับ
  4. เรียกใช้คำสั่งค้นหาด้วย รอคอย, ตัวอย่างเช่น await db.collection('Employee').find().toArray()ซึ่งจะส่งคืนอาร์เรย์โดยตรง แทนที่จะต้องใช้ฟังก์ชันเรียกกลับของเคอร์เซอร์
  5. ปิดการเชื่อมต่อกับ await client.close() เขียนโค้ดไว้ในบล็อก finally เพื่อให้โค้ดทำงานเสมอ แม้ว่าการสืบค้นจะเกิดข้อผิดพลาดก็ตาม
const { MongoClient } = require('mongodb');

const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

async function run() {
try {
await client.connect();
const db = client.db('EmployeeDB');
const employees = await db.collection('Employee').find().toArray();
console.log(employees);
} finally {
await client.close();
}
}

run().catch(console.error);

ทั้งสองรูปแบบเชื่อมต่อกับฐานข้อมูล EmployeeDB และคอลเลกชัน Employee เดียวกัน ดังนั้นโค้ดที่ใช้ Callback เดิมจึงไม่จำเป็นต้องเขียนใหม่ในทันที ทั้งสองวิธีสามารถใช้งานร่วมกันได้ในขณะที่โครงการกำลังย้ายระบบไปทีละขั้นตอน และการเลือกใช้ส่วนใหญ่ขึ้นอยู่กับว่าโครงการใดต้องการใช้แบบใด MongoDB เวอร์ชันไดรเวอร์ Node.js ในไฟล์ package.json ได้ถูกกำหนดไว้แล้ว

วิธีสร้างแอป node express ด้วย MongoDB เพื่อจัดเก็บและให้บริการเนื้อหา

เมื่อได้กล่าวถึงรูปแบบการเชื่อมต่อทั้งสองแบบแล้ว ส่วนถัดไปจะนำรูปแบบ Callback แบบคลาสสิกมาใช้ภายในแอปพลิเคชัน Express อย่างสมบูรณ์ เนื่องจากเป็นไวยากรณ์ที่เซิร์ฟเวอร์ตัวอย่างดั้งเดิมด้านล่างใช้ การสร้างแอปพลิเคชันด้วยการผสมผสานระหว่าง Express และ MongoDB เป็นเรื่องปกติในทุกวันนี้

เมื่อทำงานกับ Javaต้นฉบับ สำหรับแอปพลิเคชันบนเว็บ เรามักจะได้ยินคำว่า MEAN stack

  • คำว่า MEAN stack หมายถึงคอลเลกชันของ Javaเทคโนโลยีที่ใช้สคริปต์เพื่อพัฒนาแอพพลิเคชันเว็บ
  • MEAN เป็นตัวย่อสำหรับ MongoDB, เอ็กซ์เพรสJS, AngularJSและ Node.js

ดังนั้นจึงเป็นการดีเสมอที่จะทำความเข้าใจว่า Node.js และ MongoDB ทำงานร่วมกันเพื่อส่งมอบแอปพลิเคชันที่โต้ตอบกับฐานข้อมูลแบ็กเอนด์

มาดูตัวอย่างง่ายๆ ของการใช้ “express” และ “MongoDB" ด้วยกัน. ตัวอย่างของเราจะใช้ประโยชน์จากคอลเลกชันพนักงานเดียวกันใน MongoDB ฐานข้อมูล EmployeeDB

ต่อไปนี้เราจะนำ Express มาใช้เพื่อแสดงข้อมูลบนหน้าเว็บของเราเมื่อผู้ใช้ร้องขอ เมื่อแอปพลิเคชันของเราทำงานบน Node.js ผู้ใช้อาจจำเป็นต้องเรียกดูไปยังหน้าเว็บ URL http://localhost:3000/Employeeid.

เมื่อเปิดหน้าขึ้นมา รหัสพนักงานทั้งหมดในคอลเล็กชันพนักงานจะปรากฏขึ้น มาดูตัวอย่างโค้ดในแต่ละส่วนกัน ซึ่งจะช่วยให้เราบรรลุเป้าหมายดังกล่าวได้

ขั้นตอน 1) กำหนดไลบรารีทั้งหมดที่จำเป็นต้องใช้ในแอปพลิเคชันของเรา ซึ่งในกรณีของเราคือทั้ง MongoDB และห้องสมุดด่วน

Code คำอธิบาย:

  1. เรากำลังกำหนดไลบรารี 'ด่วน' ซึ่งจะใช้ในแอปพลิเคชันของเรา
  2. เรากำลังกำหนดของเรา 'MongoDB' ซึ่งจะใช้ในแอปพลิเคชันของเราเพื่อเชื่อมต่อกับไลบรารีของเรา MongoDB ฐานข้อมูล
  3. ที่นี่เรากำลังกำหนดนิยามของ URL เพื่อเชื่อมต่อกับฐานข้อมูลของเรา
  4. ในที่สุด เราจะกำหนดสตริงที่จะใช้ในการจัดเก็บคอลเลกชันของรหัสพนักงานที่จำเป็นต้องแสดงในเบราว์เซอร์ในภายหลัง

ขั้นตอน 2) ในขั้นตอนนี้ ตอนนี้เรากำลังจะได้รับเรกคอร์ดทั้งหมดในคอลเลกชัน 'พนักงาน' ของเรา และทำงานร่วมกับพวกเขาตามลำดับ

Code คำอธิบาย:

  1. เรากำลังสร้างเส้นทางไปยังแอปพลิเคชันของเราที่เรียกว่า 'Employeeid' ดังนั้นเมื่อใดก็ตามที่ใครก็ตามเรียกดู http://localhost:3000/Employeeid ของแอปพลิเคชันของเรา ข้อมูลโค้ดที่กำหนดไว้สำหรับเส้นทางนี้จะถูกดำเนินการ
  2. ที่นี่เราได้รับบันทึกทั้งหมดในคอลเลกชัน 'พนักงาน' ของเราผ่านคำสั่ง db.collection('Employee').find() จากนั้นเราจะกำหนดคอลเลกชันนี้ให้กับตัวแปรที่เรียกว่าเคอร์เซอร์ เมื่อใช้ตัวแปรเคอร์เซอร์นี้ เราจะสามารถเรียกดูบันทึกทั้งหมดของคอลเลกชันได้
  3. ขณะนี้เรากำลังใช้ฟังก์ชัน cursor.each() เพื่อนำทางไปยังบันทึกทั้งหมดในคอลเลกชันของเรา สำหรับแต่ละเรกคอร์ด เราจะกำหนดข้อมูลโค้ดว่าต้องทำอย่างไรเมื่อเข้าถึงแต่ละเรกคอร์ด
  4. ในที่สุด เราจะเห็นว่าหากข้อมูลที่ส่งกลับมาไม่ใช่ค่าว่าง เราจะเรียกพนักงานโดยใช้คำสั่ง “item.Employeeid” ส่วนที่เหลือของโค้ดคือการสร้างโค้ด HTML ที่เหมาะสมซึ่งจะช่วยให้แสดงผลลัพธ์ของเราได้อย่างถูกต้องในเบราว์เซอร์

ขั้นตอน 3) ในขั้นตอนนี้ เราจะส่งออกไปยังหน้าเว็บและทำให้แอปพลิเคชันของเรารับฟังพอร์ตใดพอร์ตหนึ่ง

Code คำอธิบาย:

  1. ที่นี่เรากำลังส่งเนื้อหาทั้งหมดที่สร้างขึ้นในขั้นตอนก่อนหน้าไปยังหน้าเว็บของเรา พารามิเตอร์ 'res' ช่วยให้เราสามารถส่งเนื้อหาไปยังหน้าเว็บของเราเพื่อเป็นการตอบกลับ
  2. เรากำลังทำให้แอปพลิเคชัน Node.js ทั้งหมดของเรารับฟังบนพอร์ต 3000

Output:

จากผลลัพธ์ที่ได้

  • แสดงให้เห็นอย่างชัดเจนว่ารหัสพนักงานทั้งหมดในคอลเลกชันพนักงานถูกดึงข้อมูลแล้ว ทั้งนี้เป็นเพราะเราใช้ MongoDB ไดรเวอร์เพื่อเชื่อมต่อกับฐานข้อมูลและดึงข้อมูลบันทึกของพนักงานทั้งหมดแล้วใช้ "ด่วน" เพื่อแสดงบันทึก

นี่คือรหัสสำหรับการอ้างอิงของคุณ

var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
var str = "";

app.route('/Employeeid').get(function(req, res)

{
MongoClient.connect(url, function(err, db) {
var cursor = db.collection('Employee').find();
//noinspection JSDeprecatedSymbols
cursor.each(function(err, item) {

if (item != null) {
str = str + " Employee id " + item.Employeeid + "</br>";
}
});
res.send(str);
db.close();
});
});

var server = app.listen(3000, function() {});

หมายเหตุ cursor.each อาจเลิกใช้แล้วขึ้นอยู่กับเวอร์ชันของคุณ MongoDB คนขับ คุณสามารถต่อท้าย //noinspection JSDeprecatedSymbols ก่อน cursor.each เพื่อหลีกเลี่ยงปัญหานี้ หรือคุณสามารถใช้ forEach ด้านล่างนี้คือโค้ดตัวอย่างที่ใช้ forEach

var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
var str = "";

app.route('/Employeeid').get(function(req, res) {
MongoClient.connect(url, function(err, db) {
var collection = db.collection('Employee');
var cursor = collection.find({});
str = "";
cursor.forEach(function(item) {
if (item != null) {
str = str + "    Employee id  " + item.Employeeid + "</br>";
}
}, function(err) {
res.send(err);
db.close();
}
);
});
});
var server = app.listen(8080, function() {});

คำถามที่พบบ่อย

แทนที่สตริงการเชื่อมต่อภายในเครื่องด้วยสตริง Atlas SRV จากไดอะล็อกการเชื่อมต่อคลัสเตอร์ ตัวอย่างเช่น mongodb+srv://user:password@cluster.mongodb.net/EmployeeDB จากนั้นส่งสตริงดังกล่าวไปยัง MongoDB สมุดแผนที่ ตรงตามที่ MongoClient คาดหวังไว้ทุกประการ

หลีกเลี่ยงการนำสตริงไปใส่ในซอร์สโค้ด โดยโหลดจากตัวแปรสภาพแวดล้อมด้วยแพ็กเกจ เช่น โดเทนจากนั้นเพิ่มไฟล์ .env ลงใน .gitignore เพื่อป้องกันไม่ให้ข้อมูลรับรองไปถึงระบบควบคุมเวอร์ชัน

ไม่ ฟรี MongoDB คลัสเตอร์ Atlas ใช้งานได้กับทุกตัวอย่างที่แสดงไว้ที่นี่ มีเพียงสตริงการเชื่อมต่อเท่านั้นที่เปลี่ยนแปลง ดังนั้น การใช้งานในเครื่องจึงแตกต่างออกไป MongoDB การติดตั้ง Community Server เป็นทางเลือก ไม่ใช่ข้อบังคับ

ใช่เครื่องมือเช่น นักบิน GitHub ถึงแม้ว่าจะสามารถร่างคำสั่ง find, insertOne หรือ updateOne ได้อย่างรวดเร็ว แต่ผู้พัฒนาควรตรวจสอบชื่อฟิลด์ เวอร์ชันไดรเวอร์ และการจัดการการเชื่อมต่อก่อนที่จะเรียกใช้โค้ดที่สร้างขึ้น

การคัดลอกข้อความแสดงข้อผิดพลาดและรูปแบบสตริงการเชื่อมต่อที่ถูกต้องลงในผู้ช่วย AI มักจะช่วยให้พบสาเหตุทั่วไป เช่น การขาดคำสั่ง await หมายเลขพอร์ตที่ไม่ถูกต้อง หรือที่อยู่ IP ที่ไม่ได้อยู่ในรายการที่อนุญาตในเครือข่าย Atlas

สรุปโพสต์นี้ด้วย: