MongoDB Compass

공부의 기록·2022년 3월 19일
0

DB MongoDB

목록 보기
3/5
post-thumbnail

Introduce

본 문서는 2022년 3월 20일 에 작성되었습니다.

지금까지 MongoDB Shell 을 사용하였고 앞으로도 그럴 생각이기 때문에
MongoDB Compass (GUI) 의 고유한 기능 들을 간단하게 적어두자 라고 생각했습니다.

아래는 사용한 기술 환경입니다.
이미 컴퓨터에는 MongoDB Version 5.0.2 가 설치되어 있지만,
MongoDB Atlas 가 MongodB Version 5.0.6 로 생성되었기 때문에
따로 기록을 해두었습니다.

MongoDB Atlas - Options

MongoDB Version 5.0.6
Network AWS / Seoul
Payment FREE / M0 SandBox


Connect

Velog - Unchaptered / MongoDB Series > Introduce > MongoDB Atlas > Connect

위 게시글을 참고하여, MongoDB Atlas 와 MongoDB Compass 를연결해줍니다.

이후,
MongoDB Compass 의 하단에 있는 MONGOSH(이하 Shell 로 통일) 을 이용하면 됩니다.

지금까지 개발을 할때는 Mongoose(ODM) 을 쓰고
실제로 확인을 할때는 MongoDB Shell 에서 db.이름.find({}) 를 사용을 했는데, ...

너무 멍청하게도
Mongoose 의 모델명.find({}) 와 db.모델명.find({}) 가 왜 다른 것이라고 인지하고 사용했는지 모르겠습니다.

이번에 MongoDB Compass 에서
추천 명령어로 find, findOne 등을 보여주는 것으로 거의 유사함을 알게 되었습니다.
실제로 동일한 것인지는... 확신할 수 없었습니다.

Command

MongoDB Shell 의 명령어를 일일히 외우는 것은 비효율적이라고 생각합니다.
상황에 맞춰서 구글링을 하면서 쓰다보면 자연스럽게 외워집니다.

혹은 MONGDBSH 에 help 라고 입력을 하면 사용 가능한 명령어 리스트가 출력됩니다.


Features

MongoDB 의 특징은 다음과 같습니다.

  1. NoSQL
  2. Based on Documentation (= Schemaless)

Documentation

Velog - unchaptered / MongoDB Thoery > ... > Based on Documentation

위 게시글에서 Schemaless 라는 특징을 언급한 바가 있습니다.

이러한 특징을 다음과 같이,
불규칙한 스키마와 동일한 키에 다른 자료형을 넣는 구문으로 확인할 수 있습니다.

// 불규칙한 형태의 값 입력 가능
db.users.insertOne({ name:"hello", email:"tester@gmail.com" });
db.users.insertOne({ name:"hello" });
db.users.insertOne({ favorite:"food" });
db.users.insertOne({ age:13 });
db.users.insertOne({ age:"13" });

// 모든 값 출력
db.users.find({});

Syntax

Shell 에서 사용가능한 명령어의 수는 매우 많습니다.
하지만, 가장 기본적인 데이터의 CRUD 는 다음과 존재합니다.

  1. Insert
  2. Update
  3. Find
  4. Delete

가장 기본적인 문법은 아래에 적어두었지만,
실제로 이 외에도 다양한 CRUD 명령어가 있으며,
여러 가지 명령어가 혼합된 상태 혹은 새로운 종류의 명령어도 존재합니다.

이에 관해서는 별도의 포스트에서 다루도록 하겠습니다.

Insert

아래와 같은 명령어로 새로운 데이터를 넣을 수 있습니다.

db.모델명.insertOne({:});
db.모델명.insertOne({: {:} });
db.모델명.insertOne({: [:,:] });

Update

아래와 같은 명령어로 기존의 데이터를 수정할 수 있습니다.

db.모델명.updateOne(대상지정, 수정내용);

db.모델명.updateOne({:}, { $set:{:}});

db.모델명.updateOne({:}, 

또한 해당 키-값 쌍의 타입이 숫자일 경우 다음과 같은 방법도 존재합니다.

db.모델명.updateOne({:}, { $inc:{:41 }});
db.모델명.updateOne({:}, { $inc:{:-11 }});

Read

아래와 같은 명령어로 기존의 데이터를 찾을 수 있습니다.

db.모델명.find({});

db.모델명.findOne(대상지정);
db.모델명.findOne({:});

Delete

아래와 같은 명령어로 기존의 데이터를 삭제할 수 있습니다.

db.모델명.delete({});

db.모델명.deleteOne(대상지정);
db.모델명.deleteOne({:});

Issues

Shell 을 사용하면서 발생하는 이슈들을 모아봤습니다.

_id 이용한 접근

MongoDB 에서 자동으로 생성해주는
해시 아이디인 _id:ObjectId() 를 이용하는 방법은 다음과 같습니다.

db.users.findOne({ _id: ObjectId("6236122801f8668ba1bed919") });

단,
MongoDB Version 5.0.6, Compass Version 1.30.1 이전 버전일 경우,
아래 명령어를 입력하였을 때 ObjectId is not defined 에러가 발생할 수 있습니다.

Object is not defined

_id 이용한 접근을 시도하였을 때,
ReferenceError: ObjectId is not defined 에러가 발생할 경우
다음의 명령어를 shell 에 작성해주면 ObjectId 가 임포트되며 에러가 해결됩니다.

let ObjectId = require("mongodb").ObjectID

키 안의 키 접근

일반적으로 다음과 같은 명령어로 키-값 쌍에 접근할 수 있습니다.

db.모델명.findOne({ name:"unchaptered developer" });

하지만 어떠한 키가 키-쌍을 담고있는 객체인 경우에,
다음과 같은 명령어로 키-(키-쌍) 에 접근할 수 있습니다.

db.모델명.findOne({ "name.first":"unchaptered" });

1번과 2번의 데이터를 json 방식으로 표현하면 다음과 같습니다.

{
  "name": "unchaptered developer"
}
{
  "name": {
    "first": "unchaptered",
    "last": "developer"
  }
}
profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.

0개의 댓글