MongoDB 개요
MongoDB는 대표적인 NoSQL 데이타베이스의 하나로서 데이타를 BSON (Binary JSON)이라는 다큐먼트 형태로 저장한다. NoSQL(Not Only SQL)은 관계형 데이타베이스(Relational Database)에서 사용하는 Table을 사용하지 않으며, 일반적으로 SQL문을 사용하지도 않는다. NoSQL은 단순한 Key / Value 형태의 데이타를 대량으로 저장하고, 특히 컬렉션(테이블과 비슷한 개념) 간의 Relationship이 필요하지 않은 경우 적합하다.
MongoDB 서버 설치
MongoDB는 http://www.mongodb.org 에서 무료로 다운받아 설치할 수 있다. 서버 엔진 (bin\mongod.exe) 을 커맨트라인이나 서비스로 실행할 수 있는데, 실행 전에 데이타베이스 저장 폴더를 임의로 만들어 주고 이를 --dbpath에 지정해 준다.
mongodb.exe --dbpath c:\mongo\data\db
C#을 이용한 MongoDB 활용 예제
MongoDB를 C#에서 엑세스하기 위해서는 먼저 MongoDB C# 드라이버를 https://github.com/mongodb/mongo-csharp-driver/downloads 에서 다운받고, 이 드라이버에 있는 2개의 DLL (MongoDB.Driver.dll 과 MongoDB.Bson.dll)을 프로젝트 레퍼런스에 추가(Add Reference)한다.
MongoDB 사용을 위해서는 먼저 Connection String을 지정하고 MongoClient 객체를 생성한다. 그리고 아래 예제와 같이 GetDatabase()를 호출하여 데이타베이스명을 지정한다. 데이타베이스가 없는 경우, 처음 컬렉션이 생성될 때 데이타베이스가 자동으로 생성된다. 데이타는 컬렉션 중심으로 처리되는데, 이 컬렉션 객체의 메서드 Insert(), Update()/Save(), Remove() 등을 사용하여 데이타를 조작하고, 쿼리는 Find() 메서드를 사용하여 데이타를 읽어 온다.
MongoDB의 컬력센은 데이타를 쓰거나 읽을 때 _id 라는 키 컬럼을 사용한다. 이 _id 컬럼의 데이타는 DB에 의해 자동으로 생성되는데, 이 컬럼을 위해 C#에서 데이타 클래스 (도메인 클래스)를 생성할 때, 아래 Customer 클래스처럼, ObjectID 타입의 Id라는 속성을 추가해 준다.
MongoDB 사용을 위해서는 먼저 Connection String을 지정하고 MongoClient 객체를 생성한다. 그리고 아래 예제와 같이 GetDatabase()를 호출하여 데이타베이스명을 지정한다. 데이타베이스가 없는 경우, 처음 컬렉션이 생성될 때 데이타베이스가 자동으로 생성된다. 데이타는 컬렉션 중심으로 처리되는데, 이 컬렉션 객체의 메서드 Insert(), Update()/Save(), Remove() 등을 사용하여 데이타를 조작하고, 쿼리는 Find() 메서드를 사용하여 데이타를 읽어 온다.
MongoDB의 컬력센은 데이타를 쓰거나 읽을 때 _id 라는 키 컬럼을 사용한다. 이 _id 컬럼의 데이타는 DB에 의해 자동으로 생성되는데, 이 컬럼을 위해 C#에서 데이타 클래스 (도메인 클래스)를 생성할 때, 아래 Customer 클래스처럼, ObjectID 타입의 Id라는 속성을 추가해 준다.
예제
using System;
using System.Linq;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
namespace mongoDB1
{
class Program
{
static void Main(string[] args)
{
// Mongo DB를 위한 Connection String
string connString = "mongodb://localhost";
// MongoClient 클라이언트 객체 생성
MongoClient cli = new MongoClient(connString);
// testdb 라는 데이타베이스 가져오기
// 만약 해당 DB 없으면 Collection 생성시 새로 생성함
MongoDatabase testdb = cli.GetServer().GetDatabase("testdb");
// testdb 안에 Customers 라는 컬렉션(일종의 테이블)
// 가져오기. 만약 없으면 새로 생성.
var customers = testdb.GetCollection<Customer>("Customers");
// INSERT - 컬렉션 객체의 Insert() 메서드 호출
// Insert시 _id 라는 자동으로 ObjectID 생성
// 이 _id는 해당 다큐먼트는 나타는 키.
Customer cust1 = new Customer { Name = "Kim", Age = 30 };
customers.Insert(cust1);
ObjectId id = cust1.Id;
// SELECT - id로 검색
IMongoQuery query = Query.EQ("_id", id);
var result = customers.Find(query).SingleOrDefault();
if (result != null)
{
Console.WriteLine(result.ToString());
}
// UPDATE
// Save() = 전체 다큐먼트 갱신.
// Update() = 부분 수정
cust1.Age = 31;
customers.Save(cust1);
// DELETE
var qry = Query.EQ("_id", id);
customers.Remove(qry);
}
}
class Customer
{
// 이 Id는 MongoDB Collection의 _id 컬럼과 매칭됨
// (예외적인 Naming Convention)
public ObjectId Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return Name + " " + Age;
}
}
}
using System.Linq;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
namespace mongoDB1
{
class Program
{
static void Main(string[] args)
{
// Mongo DB를 위한 Connection String
string connString = "mongodb://localhost";
// MongoClient 클라이언트 객체 생성
MongoClient cli = new MongoClient(connString);
// testdb 라는 데이타베이스 가져오기
// 만약 해당 DB 없으면 Collection 생성시 새로 생성함
MongoDatabase testdb = cli.GetServer().GetDatabase("testdb");
// testdb 안에 Customers 라는 컬렉션(일종의 테이블)
// 가져오기. 만약 없으면 새로 생성.
var customers = testdb.GetCollection<Customer>("Customers");
// INSERT - 컬렉션 객체의 Insert() 메서드 호출
// Insert시 _id 라는 자동으로 ObjectID 생성
// 이 _id는 해당 다큐먼트는 나타는 키.
Customer cust1 = new Customer { Name = "Kim", Age = 30 };
customers.Insert(cust1);
ObjectId id = cust1.Id;
// SELECT - id로 검색
IMongoQuery query = Query.EQ("_id", id);
var result = customers.Find(query).SingleOrDefault();
if (result != null)
{
Console.WriteLine(result.ToString());
}
// UPDATE
// Save() = 전체 다큐먼트 갱신.
// Update() = 부분 수정
cust1.Age = 31;
customers.Save(cust1);
// DELETE
var qry = Query.EQ("_id", id);
customers.Remove(qry);
}
}
class Customer
{
// 이 Id는 MongoDB Collection의 _id 컬럼과 매칭됨
// (예외적인 Naming Convention)
public ObjectId Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return Name + " " + Age;
}
}
}