Node.js를 MongoDB 예제가 포함된 튜토리얼
⚡ 스마트 요약
Node.js를 MongoDB 이 통합을 통해 Node 애플리케이션은 NoSQL 데이터베이스에 연결하고, CRUD 작업을 실행하고, 네이티브 MongoDB 드라이버와 스키마 기반 데이터 모델링을 위한 Mongoose를 함께 사용하여 Express 경로를 통해 실시간 레코드를 노출할 수 있습니다.
오늘날 거의 모든 웹 애플리케이션은 백엔드에 일종의 데이터 저장 시스템을 갖추고 있습니다. 예를 들어, 온라인 쇼핑몰을 생각해 보세요.ping 이 애플리케이션에서는 상품 가격과 같은 데이터가 데이터베이스에 저장됩니다.
Node js 프레임워크는 관계형(예: Oracle 및 MS SQL Server) 및 비관계형 데이터베이스(예: MongoDB). 이 튜토리얼에서는 Node js 애플리케이션 내에서 데이터베이스를 사용하는 방법을 살펴보겠습니다.
Node.js 및 NoSQL 데이터베이스
수년에 걸쳐 NoSQL 데이터베이스는 다음과 같은 방식으로 발전해 왔습니다. MongoDB 그리고 관계형 데이터베이스는 다음과 같습니다. MySQL 데이터베이스는 데이터를 저장하는 데 매우 널리 사용되고 있습니다. 이러한 데이터베이스가 모든 유형의 데이터, 특히 모든 형식의 데이터를 저장할 수 있다는 점이 바로 널리 사용되는 이유입니다.
Node.js는 두 가지 모두에서 작동할 수 있습니다. MySQL MongoDB 데이터베이스로. 이러한 데이터베이스 중 하나를 사용하려면 노드 패키지 관리자를 사용하여 필요한 모듈을 다운로드하고 사용해야 합니다.
럭셔리 MySQL필수 모듈의 이름은 "mysql"입니다. MongoDB개발자는 공식 네이티브 버전을 설치할 수 있습니다. 몽고 이 문서의 코드 예제 전체에서 사용되는 패키지인 드라이버 또는 스키마 기반 라이브러리 등이 있습니다. 몽구스 애플리케이션에 더 많은 구조가 필요할 때.
이러한 모듈을 사용하면 Node.js에서 다음 작업을 수행할 수 있습니다.
- 연결 풀링 관리 – 여기에서 연결 풀링 수를 지정할 수 있습니다. MySQL Node.js가 유지하고 저장해야 하는 데이터베이스 연결입니다.
- 데이터베이스에 대한 연결을 만들고 닫습니다. 두 경우 모두 "create" 및 "close" 연결 메서드가 실행될 때마다 호출할 수 있는 콜백 함수를 제공할 수 있습니다.
- 쿼리를 실행하여 각 데이터베이스에서 데이터를 가져와 데이터를 검색할 수 있습니다.
- 데이터 삽입, 삭제, 업데이트와 같은 데이터 조작도 이러한 모듈을 통해 수행할 수 있습니다.
나머지 주제에 대해서는 어떻게 작업할 수 있는지 살펴보겠습니다. MongoDB 내의 데이터베이스 Node.js를먼저 가장 일반적인 두 가지 대화 방식을 간단히 비교해 보겠습니다. MongoDB Node.js 프로젝트에서 가져온 것입니다.
MongoDB Node.js에서 Native Driver와 Mongoose의 차이점
위에 언급된 모듈 이름은 Node.js가 모듈과 통신하는 두 가지 서로 다른 방식을 제공하기 때문에 혼란스러울 수 있습니다. MongoDB: 원주민 몽고 운전사와 몽구스 ODM(객체 데이터 모델링 라이브러리). 이 문서 뒷부분의 모든 코드 예제는 네이티브 드라이버를 사용하며, 이 드라이버는 설치 시 함께 설치됩니다. npm 몽고디비 설치 그리고 다음을 통해 접근 가능합니다 MongoClientMongoose는 동일한 드라이버를 래핑하고 스키마 정의, 유효성 검사 및 재사용 가능한 모델 메서드를 추가하여 여러 컬렉션에서 예측 가능한 데이터 구조가 필요한 대규모 애플리케이션에 적합합니다. 이러한 차이점을 미리 이해하면 패키지를 설치하거나 다른 Node.js 관련 문서를 읽을 때 혼란을 방지할 수 있습니다. MongoDB 온라인에서 다양한 예시를 찾아볼 수 있습니다. 아래 표는 두 가지 옵션을 비교하여 개발자가 특정 프로젝트에 적합한 도구를 선택할 수 있도록 도와줍니다.
| 아래 | 네이티브 MongoDB 드라이버 | 몽구스 |
|---|---|---|
| 설치 | npm 몽고디비 설치 | npm install mongoose |
| 스키마 적용 | 없음, 문서는 유연하게 유지됩니다. | 스키마 객체를 통해 정의됨 |
| 학습 곡선 | 더 낮고, 원재료에 더 가깝습니다. MongoDB 쿼리 | Higher는 자체 API 레이어를 추가합니다. |
| 가장 좋은 | 간단한 스크립트 및 성능에 민감한 코드 | 일관된 데이터 모델을 사용하는 대규모 앱 |
Tip 코어를 배우는 동안에는 기본 드라이버를 계속 사용하세요. 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},
}
- NPM 모듈 설치
Node 애플리케이션 내에서 Mongo에 액세스하려면 드라이버가 필요합니다. 사용할 수 있는 Mongo 드라이버가 많이 있지만 MongoDB 가장 인기있는 것 중 하나입니다. 설치하려면 MongoDB 모듈에서 아래 명령을 실행하십시오.
npm 몽고디비 설치
- 연결 생성 및 닫기 MongoDB 데이터 베이스. 아래 코드 조각은 연결을 생성하고 닫는 방법을 보여줍니다. MongoDB 데이터 베이스.
Code 설명 :
- 첫 번째 단계는 다음을 포함하는 것입니다. MongoDB `require` 함수를 통해 드라이버 모듈을 불러옵니다. 이 모듈이 준비되면, 모듈에 포함된 필수 함수들을 사용하여 데이터베이스에 연결할 수 있습니다.
- 다음으로 데이터베이스에 대한 연결 문자열을 지정합니다. 연결 문자열에는 3개의 키 값이 전달됩니다.
- 첫 번째는 mongoDB 데이터베이스에 연결한다는 것을 지정하는 'mongodb'입니다.
- 다음은 'localhost'입니다. 이는 로컬 시스템의 데이터베이스에 연결한다는 의미입니다.
- 다음은 'EmployeeDB'이며 이는 우리의 데이터베이스에 정의된 데이터베이스의 이름입니다. MongoDB 데이터 베이스.
- 다음 단계는 실제로 데이터베이스에 연결하는 것입니다. 연결 함수는 다음과 같은 매개변수를 받습니다. URL 또한 콜백 함수를 지정할 수 있는 기능을 제공합니다. 이 함수는 데이터베이스 연결이 이루어졌을 때 호출됩니다. 이를 통해 데이터베이스 연결이 성공했는지 여부를 알 수 있습니다.
- 이 함수에서는 성공적인 연결이 생성되었음을 나타내기 위해 콘솔에 "연결 설정됨"이라는 문자열을 작성합니다.
- 마지막으로 db.close 문을 사용하여 연결을 닫습니다.
위 코드가 정상적으로 실행되면 아래와 같이 콘솔에 “Connected”라는 문자열이 기록될 것입니다.
- 데이터 쿼리 MongoDB 데이터베이스 – 사용 MongoDB 드라이버에서 데이터를 가져올 수도 있습니다. MongoDB 데이터베이스입니다. 아래 섹션에서는 드라이버를 사용하여 EmployeeDB 데이터베이스의 Employee 컬렉션에서 모든 문서를 가져오는 방법을 보여줍니다. 이것은 우리 데이터베이스의 Employee 컬렉션입니다. MongoDB 직원과 관련된 모든 문서가 포함된 데이터베이스입니다. 각 문서에는 문서 값을 정의하는 개체 ID, 직원 이름 및 직원 ID가 있습니다.
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 설명 :
- 첫 번째 단계에서는 커서를 생성합니다. (커서는 데이터베이스에서 가져온 여러 레코드를 가리키는 포인터입니다. 커서를 사용하여 데이터베이스의 다양한 레코드를 순회합니다. 여기서는 데이터베이스에서 가져온 레코드를 가리키는 포인터를 저장할 `cursor`라는 변수를 정의합니다.) 이 커서는 MongoDB 컬렉션에서 가져온 레코드를 가리킵니다. 또한 'Employee' 컬렉션에서 레코드를 가져오도록 지정할 수도 있습니다. `find()` 함수는 해당 컬렉션의 모든 문서를 검색하도록 지정하는 데 사용됩니다. MongoDB 수집.
- 이제 커서를 반복하고 있으며 커서에 있는 각 문서에 대해 함수를 실행할 것입니다.
- 우리의 기능은 단순히 각 문서의 내용을 콘솔에 인쇄하는 것입니다.
노트: - 데이터베이스에서 특정 레코드를 가져오는 것도 가능합니다. find() 함수에 검색 조건을 지정하면 됩니다. 예를 들어, 직원 이름이 특정 이름인 레코드만 가져오고 싶다고 가정해 보겠습니다. Guru99이면 이 진술은 다음과 같이 쓸 수 있습니다.
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
위 코드가 성공적으로 실행되면 콘솔에 다음 출력이 표시됩니다.
출력:
출력에서,
- 컬렉션의 모든 문서가 검색된 것을 명확하게 볼 수 있습니다. 이는 mongoDB 연결(db)의 find() 메서드를 사용하고 cursor를 사용하여 모든 문서를 반복함으로써 가능합니다.
- 컬렉션에 문서 삽입 – 에서 제공하는 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 설명 :
- 여기서는 insertOne 메소드를 사용하고 있습니다. MongoDB Employee 컬렉션에 문서를 삽입하는 라이브러리입니다.
- Employee 컬렉션에 삽입해야 할 문서 세부 정보를 지정하고 있습니다.
지금 내용을 확인해보면 MongoDB 데이터베이스를 보면 Employeeid가 4이고 EmployeeName이 "NewEmployee"인 레코드가 Employee 컬렉션에 삽입되어 있습니다.
참고 : 레코드가 데이터베이스에 삽입되고 여기에 출력이 표시될 수 없기 때문에 콘솔에는 출력이 표시되지 않습니다.
데이터가 데이터베이스에 제대로 삽입되었는지 확인하려면 다음 명령을 실행해야 합니다. MongoDB
- EmployeeDB 사용
- db.Employee.find({Employeeid :4 })
첫 번째 문은 EmployeeDb 데이터베이스에 연결되어 있는지 확인합니다. 두 번째 문은 직원 ID가 4인 레코드를 검색합니다.
- 컬렉션의 문서 업데이트 – 에서 제공하는 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 설명 :
- 여기서는 "updateOne" 메소드를 사용하고 있습니다. MongoDB mongoDB 컬렉션의 문서를 업데이트하는 데 사용되는 라이브러리입니다.
- 업데이트해야 할 문서의 검색 기준을 지정하고 있습니다. 우리의 경우 EmployeeName이 "NewEmployee"인 문서를 찾고 싶습니다.
- 그런 다음 문서의 EmployeeName 값을 "NewEmployee"에서 "Mohan"으로 설정하려고 합니다.
지금 내용을 확인해보면 MongoDB 데이터베이스를 살펴보면 Employee 컬렉션에서 Employeeid가 4이고 EmployeeName이 "Mohan"인 레코드가 업데이트된 것을 찾을 수 있습니다.
데이터베이스에서 데이터가 제대로 업데이트되었는지 확인하려면 다음 명령을 실행해야 합니다. MongoDB
- EmployeeDB 사용
- db.Employee.find({Employeeid :4 })
첫 번째 문은 EmployeeDb 데이터베이스에 연결되어 있는지 확인합니다. 두 번째 문은 직원 ID가 4인 레코드를 검색합니다.
- 컬렉션에서 문서 삭제 – 컬렉션 내 문서는 에서 제공하는 “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 설명 :
- 여기서는 "deleteOne" 메소드를 사용하고 있습니다. MongoDB mongoDB 컬렉션에서 문서를 삭제하는 데 사용되는 라이브러리입니다.
- 삭제해야 할 문서의 검색 기준을 지정하고 있습니다. 우리의 경우 EmployeeName이 "Mohan"인 문서를 찾아서 삭제하려고 합니다.
지금 내용을 확인해보면 MongoDB 데이터베이스를 살펴보면 Employeeid가 4이고 EmployeeName이 "Mohan"인 레코드가 Employee 컬렉션에서 삭제된 것을 볼 수 있습니다.
데이터베이스에서 데이터가 제대로 업데이트되었는지 확인하려면 다음 명령을 실행해야 합니다. MongoDB
- EmployeeDB 사용
- db.직원.찾기()
첫 번째 문은 EmployeeDb 데이터베이스에 연결되어 있는지 확인합니다. 두 번째 문은 직원 컬렉션의 모든 기록을 검색하고 표시합니다. 여기에서 기록이 삭제되었는지 여부를 확인할 수 있습니다.
최신 비동기/Await MongoDB Node.js에서의 연결
The MongoClient.connect(url, callback) 이 글 전체에서 사용된 패턴은 다음과 일치합니다. MongoDB 위 예제들이 작성될 당시의 Node.js 드라이버 버전입니다. 최근 드라이버 릴리스에서도 해당 콜백 스타일을 지원하지만, 대부분의 새로운 프로젝트에서는 중첩된 콜백 없이 코드를 처음부터 끝까지 읽기 쉽게 하기 위해 프로미스와 async/await를 선호합니다. 아래 단계에서는 동일한 직원 연결을 최신 구문을 사용하여 다시 작성합니다.
- 함수 외부에서 MongoClient 인스턴스를 하나만 생성하고 연결 문자열을 한 번만 전달합니다. 예를 들어 다음과 같습니다. const client = new MongoClient(url);
- 상담 예약 번호 클라이언트가 연결될 때까지 기다립니다. 콜백 함수를 전달하는 대신 비동기 함수 내부에서 연결을 엽니다.
- 다음 데이터베이스를 가져오세요 클라이언트.db('EmployeeDB') 콜백 함수 내부에서 반환되는 객체에 의존하는 대신에.
- 쿼리를 실행하세요 기다리다예를 들어, await db.collection('Employee').find().toArray()커서 콜백을 필요로 하지 않고 배열을 직접 반환하는 메서드입니다.
- 연결을 종료하세요 클라이언트가 닫힐 때까지 기다립니다. 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 컬렉션에 연결되므로 기존 콜백 기반 코드를 즉시 다시 작성할 필요가 없습니다. 두 접근 방식은 프로젝트가 점진적으로 마이그레이션되는 동안 공존할 수 있으며, 선택은 주로 어떤 방식이 적합한지에 따라 달라집니다. MongoDB Node.js 드라이버 버전은 package.json 파일에 이미 설정되어 있습니다.
Node Express 앱을 구축하는 방법 MongoDB 콘텐츠를 저장하고 제공하기 위해
두 가지 연결 방식을 모두 살펴보았으므로, 다음 섹션에서는 아래 예제 서버에서 사용하는 구문인 클래식 콜백 패턴을 완전한 Express 애플리케이션에 적용합니다. Express와 기존 Express를 조합하여 애플리케이션을 구축하는 방법은 다음과 같습니다. MongoDB 요즘에는 꽤 흔합니다.
함께 작업 할 때 JavaScript 웹 기반 애플리케이션의 경우, 일반적으로 MEAN 스택이라는 용어를 접하게 될 것입니다.
- MEAN 스택이라는 용어는 다음과 같은 집합을 의미합니다. Java웹 애플리케이션을 개발하는 데 사용되는 스크립트 기반 기술입니다.
- MEAN은 다음의 약어입니다. MongoDB, 익스프레스JS, AngularJS와, 그리고 Node.js.
따라서 Node.js와 MongoDB 백엔드 데이터베이스와 상호 작용하는 애플리케이션을 제공하기 위해 협력합니다.
"express"와 "를 어떻게 사용할 수 있는지에 대한 간단한 예를 살펴보겠습니다.MongoDB" 함께. 우리의 예에서는 동일한 Employee 컬렉션을 사용합니다. MongoDB EmployeeDB 데이터베이스.
이제 Express를 사용하여 사용자가 요청할 때 웹 페이지에 데이터를 표시하도록 하겠습니다. 애플리케이션이 Node.js에서 실행될 경우, 사용자는 웹 페이지를 탐색해야 할 수도 있습니다. URL http://localhost:3000/Employeeid.
페이지가 시작되면 Employee 컬렉션의 모든 직원 ID가 표시됩니다. 따라서 이를 달성할 수 있는 섹션의 코드 조각을 살펴보겠습니다.
단계 1) 우리 애플리케이션에서 사용해야 하는 모든 라이브러리를 정의합니다. MongoDB 그리고 익스프레스 라이브러리.
Code 설명 :
- 우리는 애플리케이션에 사용될 'express' 라이브러리를 정의하고 있습니다.
- 우리는 'MongoDB' 라이브러리는 우리 애플리케이션에 연결하기 위해 사용될 것입니다. MongoDB 데이터 베이스.
- 여기서 우리는 정의하고 있습니다. URL 저희 데이터베이스에 연결할 것입니다.
- 마지막으로, 나중에 브라우저에 표시되어야 하는 직원 ID 컬렉션을 저장하는 데 사용될 문자열을 정의합니다.
단계 2) 이 단계에서는 이제 'Employee' 컬렉션의 모든 레코드를 가져와 그에 따라 작업하겠습니다.
Code 설명 :
- 우리는 'Employeeid'라는 애플리케이션에 대한 경로를 만들고 있습니다. 그래서 누군가가 웹사이트를 탐색할 때마다 http://localhost:3000/Employeeid 우리 애플리케이션에서 이 경로에 대해 정의된 코드 조각이 실행됩니다.
- 여기서는 db.collection('Employee').find() 명령을 통해 'Employee' 컬렉션의 모든 레코드를 가져옵니다. 그런 다음 이 컬렉션을 커서라는 변수에 할당합니다. 이 커서 변수를 사용하면 컬렉션의 모든 레코드를 탐색할 수 있습니다.
- 이제 우리는 컬렉션의 모든 레코드를 탐색하기 위해cursor.each() 함수를 사용하고 있습니다. 각 레코드에 대해 각 레코드에 액세스할 때 수행할 작업에 대한 코드 조각을 정의하겠습니다.
- 마지막으로, 반환된 레코드가 null이 아닌 경우 "item.Employeeid" 명령을 통해 직원을 가져오는 것을 알 수 있습니다. 나머지 코드는 브라우저에서 결과를 제대로 표시할 수 있는 적절한 HTML 코드를 구성하는 것입니다.
단계 3) 이 단계에서는 출력을 웹 페이지로 보내고 애플리케이션이 특정 포트에서 수신 대기하도록 하겠습니다.
Code 설명 :
- 여기서는 이전 단계에서 구성된 전체 콘텐츠를 웹 페이지로 보냅니다. 'res' 매개변수를 사용하면 응답으로 웹페이지에 콘텐츠를 보낼 수 있습니다.
- 우리는 전체 Node.js 애플리케이션이 포트 3000에서 수신 대기하도록 만들고 있습니다.
출력:
출력에서,
- 이는 Employee 컬렉션의 모든 직원 ID가 검색되었음을 분명히 보여줍니다. 이는 우리가 MongoDB 드라이버를 사용하여 데이터베이스에 연결하고 모든 직원 기록을 검색한 다음 "express"를 사용하여 기록을 표시했습니다.
참조용 코드는 다음과 같습니다.
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를 커서.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() {});












