[몽고DB 완벽 가이드] 책을 보고 정리한 내용입니다.
: 몽고DB 데이터의 기본 단위이며 관계형 데이터베이스의 행과 유사. 정렬된 키와 연결된 값의 집합으로 이뤄져있다.
{"greeting" : "Hello, world!"}
간단한 도큐먼트로
키 : "greeting", 값 : "Hello, world!" 를 가진다.
: 도큐먼트의 모음. 관계형 데이트베이스에서의 테이블에 대응된다.
: 하나의 컬렉션 내 도큐먼트들이 모두 다른 구조를 가질 수 있다.
: 컬렉션은 이름으로 식별된다.
서브컬렉션의 네임스페이스에 '.'를 사용하여 컬렉션을 체계화한다.
ex. 블로그 기능이 있는 애플리케이션 : blog.posts, blog.authors 으로 표현가능
서브컬렉션의 특별한 속성은 없지만 여러 몽고DB 툴에서 지원한다
: 컬렉션을 그룹지어 놓는 곳.
몽고DB의 단일 인스턴스는 여러 데이터베이스를 호스팅할 수 있으며 각 데이터베이스를 완전히 독립적으로도 취급할 수 있다.
데이터베이스 또한 이름으로 식별되는데
또한, 직접 접근할 순 있지만 특별한 의미론을 갖는 예약된 데이터베이스 이름도 있다.
** 컬렉션을 저장하는 DB의 이름을 컬렉션명 앞에 붙이면 올바른 컬렉션명인 네임스페이스를 얻는다.
ex. cms 데이터베이스의 blog.posts 컬렉션을 사용한다면 컬렉션의 네임스페이스는 cms.blog.posts가 된다.
> movie = {"title" : "Star Wars: Episode IV - A New Hope",
... "director" : "George Lucas",
... "year" : 1977}
도큐먼트를 나타내는 자바스크립트 객체인 movie라는 지역 변수를 생성하고, 이 변수는 "title", "director", "year"와 같은 키를 가진다. 이 객체는 유효한 몽고DB 도큐먼트이며 insearOne 함수를 이용해 movies 컬렉션에 저장할 수 있다.
> db.movies.insertOne(movie)
{
"acknowledged" : true,
"insertedId" : ObjectId(/* 생략 */)
}
컬렉션에 find를 호출하면 이렇게 출력된다.
> db.movies.find().pretty()
{
"_id" : ObjectId(/* 생략 */),
"title" : "Star Wars: Episode IV - A New Hope",
"director" : "George Lucas",
"year" : 1977
}
> db.movies.findOne()
{
"_id" : ObjectId(/* 생략 */),
"title" : "Star Wars: Episode IV - A New Hope",
"director" : "George Lucas",
"year" : 1977
}
find와 findOne은 컬렉션을 쿼리하는데 사용하고, 컬렉션에서 단일 도큐먼트를 읽으려면 findOne을 사용한다.
이 둘은 쿼리 도큐먼트의 형태로, 조건 전달도 가능하다.
> db.movies.updateOne({title : "Star Wars: Episode IV - A New Hope"},
... {$set : {reviews: []}})
WriteResult({"nMatched": 1, "nUpserted": 0, "nModified": 1})
updateOne은 게시물을 갱신하는데 사용한다. 매개변수는 최소 두 개이고 첫 번째는 수정할 도큐먼트를 찾는 기준, 두 번째는 갱신 작업을 설명하는 도큐먼트이다. 이 때, 갱신하기 위해선 갱신 연산자인 $set를 사용한다.
위의 작업으로 도큐먼트에는 "reviews" 키가 생겼다. find로 호출하면 이렇게 출력된다.
> db.movies.findOne()
{
"_id" : ObjectId(/* 생략 */),
"title" : "Star Wars: Episode IV - A New Hope",
"director" : "George Lucas",
"year" : 1977,
"reviews" : [ ]
}
> db.movies.deleteOne({title : "Star Wars: Episode IV - A New Hope"})
deleteOne과 deleteMany는 도큐먼트를 데이터베이스에서 영구적으로 삭제한다. 이 둘은 필터 도큐먼트로 삭제 조건을 지정한다.
다른 장비나 포트에 mongod를 연결하려면 셸을 시작할 때 호스트명, 포트, 데이터베이스를 명시해야 함.
$ mongo some-host:3000/myDB
MongoDB shell version: 4.2.0
connecting to: some-host:3000.nyDB
>
만일 셸을 시작할 때 --nodb를 추가하면 어디에도 연결되지 않는다.
이후 new Mongo(호스트명)을 실행함으로써 mongod에 연결한다.
셸이 시작할 때마다 실행되는 스크립트를 .mongorc.js 파일에 넣을 수 있다.
ex. 로그인할 때 사용자를 맞이하는 셸
홈 디렉터리에 .mongorc.js 파일을 만들고 다음을 추가한다.
// .mongorc.js
var compliment = ["attractive", "intelligent", like Batman"];
var index = Math.floor(Math.random()*3);
print("Hello, you're looking particularly "+compliment[index]+" today!");