Lsiron

MongoDB 구조 본문

데이터베이스/MongoDB

MongoDB 구조

Lsiron 2024. 7. 4. 01:24

몽고디비(MongoDB)는 NoSQL 데이터베이스 중 하나로, 데이터를 유연하게 저장하고 관리할 수 있도록 설계되었다. MongoDB의 데이터 구조는 데이터베이스, 컬렉션, 그리고 다큐먼트의 3층 구조로 이루어져 있다.

1. 데이터베이스 (Database)

MongoDB의 최상위 구조이다. 하나의 MongoDB 서버에는 여러 개의 데이터베이스가 존재할 수 있다. 각 데이터베이스는 서로 독립적이며, 데이터베이스 간에는 데이터의 공유가 이루어지지 않는다.

2. 컬렉션 (Collection)

데이터베이스 안에는 여러 개의 컬렉션이 존재할 수 있다. 컬렉션은 RDBMS의 테이블과 유사한 개념으로, 다큐먼트들을 그룹화한 것이다. 컬렉션은 스키마가 고정되어 있지 않으며, 서로 다른 구조의 다큐먼트들을 저장할 수 있다.

3. 다큐먼트 (Document)

컬렉션 안에는 여러 개의 다큐먼트가 존재한다. 다큐먼트는 JSON과 유사한 형식의 BSON(Binary JSON)으로 저장된다.

{name : "Lsiron" , age : 28, status : "S"}   ==> ex) name 필드와 Lsiron 벨류값이라고 부른다. (이 필드는 MySQL의 컬럼과 대응된다.)

다큐먼트는 필드와 값의 쌍으로 이루어지며, 각 다큐먼트는 고유의 _id 필드를 가지고 있어 식별된다. 다큐먼트는 서로 다른 구조를 가질 수 있어 유연성이 높다.

 

사용법은 node.js 기준으로 설명하겠다.

 

npm 사이트로 가서 Connect to MongoDB 단락의 기본 코드를 긁어와주자.

https://www.npmjs.com/package/mongodb

 

mongodb

The official MongoDB driver for Node.js. Latest version: 6.8.0, last published: 6 days ago. Start using mongodb in your project by running `npm i mongodb`. There are 12939 other projects in the npm registry using mongodb.

www.npmjs.com

 

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

const url = '몽고디비주소';		//내 mongodb 주소
const client = new MongoClient(url);

const dbName = '몽고디비이름';		//내 mongodb 이름

async function main() {
  await client.connect();
  
  const db = client.db(dbName);
  const collection = db.collection('documents');

  return 'done.';
}

 

 

이러면 나의 mongodb와 연결이 된 것이다.

 

굳이 mongodb에 들어가지 않아도 Database 목록과 Collection 목록 그리고 Document 목록을 확인 할 수 있다.

 

1. 데이터베이스 (Database)

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

async function listDatabases() {
    const uri = '몽고디비주소';
    const client = new MongoClient(uri);

    try {
        await client.connect();
        const databasesList = await client.db().admin().listDatabases();
        return databasesList.databases;
    } finally {
        await client.close();
    }
}

찍어보면 [ 'admin' , 'config' , 'local' , '디비' ] 이런 식으로 배열로 나옴 admin, config, local은 기본 DB들임

2. 컬렉션 (Collection)

async function listCollections(databaseName) {
    const uri = '몽고디비주소';
    const client = new MongoClient(uri);

    try {
        await client.connect();
        const db = client.db(몽고디비이름);
        const collections = await db.listCollections().toArray();
        return collections;
    } finally {
        await client.close();
    }
}

찍어보면 [ '컬렉션' ] 이런 식으로 배열로 나옴

3. 다큐먼트 (Document)

async function listDocuments(databaseName, collectionName) {
    const uri = '몽고디비주소';
    const client = new MongoClient(uri);

    try {
        await client.connect();
        const collection = client.db(몽고디비이름).collection(컬렉션이름);
        const documents = await collection.find({}).toArray();
        return documents;
    } finally {
        await client.close();
    }
}

찍어보면 [{ '_id' : ObjectId('...'), 'hello' : 'wolrd' }] 이런 식으로 배열 안의 객체로 나옴