본문으로 바로가기

[MongoDB] CRUD 작업하기

category DB/MongoDB 2020. 3. 19. 20:45

1. 자료형

몽고디비는 자바스크립트 문법을 사용하므로 자바스크립트의 자료형을 따릅니다.

그 외에 추가로 몇가지 자료형이 더 있습니다.

Date나 정규표현식 같은 자바스크립트 객체를 자료형으로 사용할 수 있고,

Binary Data, ObjectId, Int, Long, Decimal, Timestamp, Javascript 등의 추가적인 자료형이 있습니다.

( 추가적인 자료형 중에서 ObjectId와 Binary Data, Timestamp 외에는 잘 사용되지 않습니다. )

2. Create (생성)

컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있습니다.

1 ) 다큐먼트 생성 : db.컬렉션명.save(다큐먼트)

nodejs 데이터베이스안에 users 컬렉션안에 데이터를 추가하는 예시입니다.

몽고디비 프롬프트를 실행하며 다음 명령어를 실행해봅니다.

$ mongo
> use nodejs
switched to db nodejs
> db.users.save({ name: 'hyemin', age: 25, married: false, comment: '안녕하세요', createdAt: new Date() });
WriteResult({ "nInserted" :1 })
> db.users.save({ name: 'tufu', age: 8, married: false, comment: '난 두부', createdAt: new Date() });
WriteResult({ "nInserted" :1 })

2 ) 아이디 참조 후 데이터 추가

comments 컬렉션에도 데이터를 넣습니다. tufu의 댓글을 추가해봅니다.

> db.users.find({ name: 'tufu' }), { _id: 1 });
{ "_id" : ObjectId{"고유아이디"})

이렇게 아이디를 찾으면 tufu의 ObjectId 가 나옵니다. 

ObjectId는 MySQL에서 기본키로 쓰이는 값과 비슷한 역할을 합니다.

> db.comments.save({ commenter: Objectid('고유 아이디'), comment: '안녕하세요 두부 댓글이에용', createdAt: new Date() });
WriteResult({ "nInserted" : 1 })

2. Read (조회)

방금 생성한 다큐먼트를 조회합니다.

1 ) 전체조회 : db.컬렉션명.find({})

컬렉션 내의 모든 다큐먼트를 조회하는 것 입니다.

2) 특정 필드 조회: db.컬렉션명.find({}, { 조회할 필드: true or false })

 

name과 married 값만 가져오길 원한다면, 아래와 같은 명령어를 활용하면 됩니다.

> db.users.find({}, {_id: 0, name: 1, married: 1});

3) 조회 시 조건 추가: db.컬렉션명.find({ 필드명: { 조건 } }, { 조회할 필드 })

조회 시 조건을 주려면 find 메서드의 첫번째 인자 객체에 기입해 주면 됩니다.

조회에 자주 쓰이는 연산자들은 아래와 같습니다.

  • $gt : 초과
  • $gte : 이상
  • $lt : 미만
  • $lte : 이하
  • $ne : 같지 않음
  • $or : 또는
  • $in : 배열 요소 중 하나

age가 10 미만인 다큐먼트의 이름과 나이를 조회하는 예시,

> db.users.find({ age: { $lt: 10 }},{ _id: 0, name: 1, age: 1 });

or 연산을 사용해 10 미만이거나 married가 false인 경우를 조회하는 예시,

> db.users.find({ $or: [{ age: $lt: 10 }},{ married: false }] }, { _id: 0, name: 1, age: 1 });
  • sort : 정렬

내림차순은 -1, 오름차순은 1입니다.

> db.users.find({}, { _id: 0, name: 1, age: 1 }).sort({ age: -1 })
  • limit : 조회할 다큐먼트 개수 설정

1개만 조회할 때 예시

> db.users.find({}, { _id: 0, name: 1, age: 1 }).sort({ age: -1 }).limit(1)
  • skip : 몇 개를 건너뛸지 설정

한개 건너뛰고 조회하는 예시

> db.users.find({}, { _id: 0, name: 1, age: 1}).sort({ age: -1 }).limit(1).skip(1)

3. Update (수정): db.컬렉션명.update({ 수정할 다큐먼트 지정 }, { 수정할 내용을 입력 })

첫번째 객체는 수정할 다큐먼트를 지정하는 객체고, 두번째 객체는 수정할 내용을 입력하는 객체입니다.

$set이라는 연산자를 활용하면 어떤 필드를 수정할지 정할 수 있습니다.

$set을 사용하지 않고 일반 객체를 넣을 경우 다큐먼트가 통째로 두번째 객체로 인자로 주어진 객체로 수정됩니다.

일부 필드 수정을 원할 때는 반드시 $set 연산자를 활용해야 합니다.

 

comment만 수정하는 예시

> db.users.update({ name: 'tufu' }, { $set: { comment: '댓글 수정해보기' }});

4. Delete (삭제): db.컬렉션명.remove({ 삭제할 다큐먼트 })

삭제할 다큐먼트에 대한 정보가 담긴 객체를 첫번째 인자로 사용합니다.

> db.users.remove({ name: 'tufu' })