일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- util.inspect
- query
- console.log
- pip jupyter
- python3
- 맥
- collection.find
- 파이썬3
- node.js 연동
- Installation
- [Object]
- mongo-native
- mongodb nodejs driver
- homebrew
- MacOS
- node.js설치
- Windows10
- Node.js
- 맥에 파이썬 설치
- Jupyter notebook
- mongodb
- Projection
- MYSQL
- nodejs mongodb
- mongoDB [Object]
- Today
- Total
Bon Voyage
MongoDB Node.js 드라이버, 간단하게 시작해보기 본문
https://mongodb.github.io/node-mongodb-native/3.2/quick-start/quick-start/
Quick Start 부분을 번역함. + 추가 예시
해당 포스트에서는 운영체제가 Windows 10 이었다.
**++ Mac 버전도 추가해두었다.**
1. 작업할 디렉토리에 Package.json 만들기
cd c:\작업할\디렉토리\경로
npm init
npm install mongodb --save
npm install mongodb --save
를 실행한 후에는 npm이 이것저것 다운로드 하는 것을 확인할 수 있어야 한다.
install이 끝나면, 해당 디렉토리 아래에 node_modules 디렉토리가 생기고, 그 안에 패키지들이 다운로드 된 것을 볼 수 있다.
+맥 버전 추가! npm init
을 하면 해당 패키지에 package.json파일을 만들기 위한 설정을 시작한다.
특별한 경우가 아니라면 다 기본값으로 enter
로 넘길 수 있다.
$ npm init
package name: (해당 디렉토리 이름으로 기본값)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/Nang/Desktop/UDG_before/package.json:
{
"name": "해당 디렉토리 이름",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
npm
으로 mongodb를 설치할 때 설치 되는 내용도 확인.
$ npm install mongodb --save
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN udg_before@1.0.0 No description
npm WARN udg_before@1.0.0 No repository field.
+ mongodb@3.3.0-beta2
added 6 packages from 4 contributors and audited 6 packages in 2.639s
found 0 vulnerabilities
2. MongoDB Server 시작하기
mongoDB가 설치한다. 내 환경에 현재 mongoDB가 설치되어 있으므로 넘어감.
(참고: 다운로드는 여기서 할 수 있다.)
3. MongoDB에 연결하기
기본 포트인 27017로 접속하여, myproject 라는 이름의 DB에 접속해보자.
//test.js
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
//assert는 Node.js 내부에서 테스트를 해보기 위한 모듈이다.
// 연결할 url
const url = 'mongodb://localhost:27017';
// DB 이름
const dbName = 'myproject';
// MongoClient를 생성
const client = new MongoClient(url);
// 서버에 연결하기 위한 connect 메소드
client.connect(function(err) {
assert.equal(null, err); //equal은 err가 null일 때 넘겨준다
console.log("Connected successfully to server");
const db = client.db(dbName);
client.close();
});
실행은 터미널에서 node 명령어와 js파일 경로를 주면 된다
node 파일/경로/test.js
참고
Assert 모듈은 예상한 결과와 실제 결과를 비교하는 단순한 테스트를 수행하기 위해 사용된다. 실제 결과가 예상한 결과와 맞지 않으면 Exception이 throw된다. Assert는 테스팅 프레임워크가 아니라서 Node.js의 내부적인 개발 목적으로만 사용되고, Exception 시 실행이 정지된다.
예를 들어 아래의 코드는 err
가 not null일 경우 Exception을 throw한다.
assert.equal(null, err);
node.js의 assert api를 참고하려면 여기 :https://nodejs.org/api/assert.html
참고 URL : https://stackoverflow.com/questions/28129223/node-js-assert-module-in-mongodb-driver-documentation
4. CRUD를 해보자!
(0) Function 호출하기
선언된 함수를 호출하려면 아래와 같은 코드를 connect body 안에 넣으면된다.
client.connect(function(err) {
...
functionToCall(매개인자, function() {
client.close();
});
...
});
client.connect에 callback function을 추가하는 방법은 아래와 같다
(각 function의 내용은 아래를 참고하자!)
insertDocuments(db, function() {
updateDocument(db, function() {
removeDocument(db, function() {
client.close();
});
});
});
(1) Insert
const insertDocuments = function(db, callback) {
// 넣을 컬렉션 가져오기
const collection = db.collection('documents');
// 시험삼아 몇 개 넣어보자
collection.insertMany([
{a : 1}, {a : 2}, {a : 3}
], function(err, result) {
assert.equal(err, null);
assert.equal(3, result.result.n);
//3개를 insert했으므로 실제 결과가 3이 아니면 Exception
assert.equal(3, result.ops.length);
console.log("Inserted 3 documents into the collection");
callback(result);
});
}
//하나의 문서만 넣고싶다면 insertOne 사용
collection.insertOne({a :1 }, function(err,result){
assert.equal(err,null);
assert.equal(1, result.result.n);
console.log("Inserted 1 documents into the collection");
});
Insert method는 object를 리턴하는데, 그 안에는 다음과 같은 필드가 포함된다.
- result는 MongoDB의 결과 documents
- ops는 _id 필드와 함께 insert된 documents
- connection insert 수행할 때 사용된 연결
(2) Find
//해당 컬렉션의 모든 Document 찾기
const findDocuments = function(db, callback) {
// 컬렉션 선택
const collection = db.collection('documents');
// 모든 Document를 Find 해보자
collection.find({}).toArray(function(err, docs) {
assert.equal(err, null);
console.log("Found the following records");
console.log(docs)
callback(docs);
});
}
//filtering하여 찾기
const findDocuments2 = function(db, callback) {
// 컬렉션 선택
const collection = db.collection('documents');
// a가 3인 Document를 Find 해보자
collection.find({'a': 3}).toArray(function(err, docs) {
assert.equal(err, null);
console.log("Found the following records");
console.log(docs);
callback(docs);
});
}
find method는 쿼리에 해당하는 모든 document를 리턴한다.
(3) Update
const updateDocument = function(db, callback) {
// 컬렉션 선택
const collection = db.collection('documents');
// a가 2인 document에서 b를 1로 업데이트
collection.updateOne({ a : 2 }
, { $set: { b : 1 } }, function(err, result) {
assert.equal(err, null);
assert.equal(1, result.result.n);
console.log("Updated the document with the field a equal to 2");
callback(result);
});
}
//sub document를 insert하고 싶다면 $push 연산자를 사용하면 된다.
collection.updateOne({ a : 2}
,{ $push : { b : { b_1 : 3 , b_2 : 4} } } ), function(err, result){
//원하는 코드 작성
});
update는 수정된 문서중 가장 첫번째 document를 리턴한다.
(4) Remove
const removeDocument = function(db, callback) {
// 컬렉션 선택
const collection = db.collection('documents');
// a가 3인 document 하나를 삭제하자
collection.deleteOne({ a : 3 }, function(err, result) {
assert.equal(err, null);
assert.equal(1, result.result.n);
console.log("Removed the document with the field a equal to 3");
callback(result);
});
}
5. Index 생성하기
인덱스는 어플리케이션의 성능을 향상시킨다.
//documents 컬렉션의 a 필드에 인덱스를 생성하자
const indexCollection = function(db, callback) {
db.collection('documents').createIndex(
{ "a": 1 },
null,
function(err, results) {
console.log(results);
callback();
}
);
};
'개념 공부 > 데이터베이스' 카테고리의 다른 글
'MongoDB in Action'으로 정리해보는 MongoDB의 인덱스 개념 (0) | 2019.09.29 |
---|---|
'이것이 MySQL이다'로 정리해보는 인덱스 개념 (0) | 2019.09.28 |
Node.js MongoDB 드라이버 : collection.find() option 사용법 (0) | 2019.07.18 |
NoSQL 데이터 모델링 Tip (0) | 2019.07.16 |
MongoDB에서의 Geospatial Data (0) | 2019.07.16 |