MongoDB

설치 및 명령어

촌나 간단하다. 그냥 모든것을 터미널에 맡기고 믿으면 된다. 아래와 같이 초간단하게 하였으나 에러가 나지 않았다. 때문에 에러가 나면 어떻게 대처해야 하는지 전혀모른다.

brew update
brew install mongodb
brew services list #실행되고 있는 DB서비스들을 확인한다.
#elasticsearch started minwoo /homebrew.mxcl.elasticsearch.plist
#mongodb       stopped
#mysql         stopped
#redis         stopped

brew services start mongodb # 몽고디비 시작
# ==> Successfully started `mongodb` (label: homebrew.mxcl.mongodb)

brew services stop mongodb # 몽고디비 종료
#Stopping `mongodb`... (might take a while)
#==> Successfully stopped `mongodb` (label: homebrew.mxcl.mongodb)
sudo mkdir -p /data/db # dbpath패스 만들기
sudo mongod # 몽고db 실행
mongo # 몽고db shell 접속

mongo명령어로 실행하면 아래와 같이 mongoDB shell이 뜬다.

MongoDB shell version v3.4.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.5
Server has startup warnings:
2017-07-10T19:28:43.113+0900 I CONTROL  [initandlisten]
2017-07-10T19:28:43.113+0900 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-07-10T19:28:43.113+0900 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-07-10T19:28:43.113+0900 I CONTROL  [initandlisten]
>
launchctl list | grep mongo #몽고디비가 실행중인지 확인.
# 12101  0   homebrew.mxcl.mongodb

launchctl stop homebrew.mxcl.mongodb #강제로 종료

왠만하면 위에 mongo 명령어로 해결합시다.

참고

Mongo Shell

mongod 서버가 구동중인 상태에서 mongo 명령어를 실행하여 몽고셸에 접근한다.

brew services start mongodb
sudo mongod
mongo

서버의 모든 데이터베이스 목록을 출혁하기 위해 show dbs 명령어를 사용한다.

> show dbs
admin      0.000GB
local      0.000GB
myproject  0.000GB

사용하고자 하는 데이터베이스를 선택하기 위해서 use myproject 명령어를 실행한다. 이때 존재하지 않는 데이터베이스를 호출하면 자동적으로 생성한다.

> use newproject
switched to db newproject
> show collections # 데이터베이스의 컬렉션 목록을 보여준다.
>

newproject 데이터베이스는 자동적으로 생성된 데이터베이스이기 때문에 컬렉션이 존재하지 않는다. db객체를 사용해 원하는 새로운 컬랙션명(newCollection)을 지정해 사용가능하다.

> db.newCollection.insert({name:'minwoo', website:'project42da.github.io'})
WriteResult({ "nInserted" : 1 })

쿼리

find 메소드? 를 인자없이 사용하면 컬랙션에 있는 모든 문서를 반환한다. 이때 자동으로 생성된 _id 필드를 확인할 수 있다.

> db.newCollection.find()
{ "_id" : ObjectId("59652f8a4c67f4aa968bebdf"), "name" : "minwoo", "website" : "project42da.github.io" }

만약 특정 정보를 가져오고 싶다면 인자로 JSON객체를 넣어주면 된다. 이때 특정 필드만 결과에 넣고 싶다면 두번째 인자로 맵을 포함시키면 된다. _id필드는 명시적으로 제외하지 않는 이상 기본적으로 결과에 포함되어있다.

> db.newCollection.find({name: "minwoo"})
{ "_id" : ObjectId("59652f8a4c67f4aa968bebdf"), "name" : "minwoo", "website" : "project42da.github.io" }

> db.newCollection.find({name: "minwoo"},{name:true})
{ "_id" : ObjectId("59652f8a4c67f4aa968bebdf"), "name" : "minwoo" }

> db.newCollection.find({name: "minwoo"},{name:true, _id:false })
{ "name" : "minwoo" }

범위안의 값을 찾아오고 싶다면 gt,gte,lt,lte 와 같은 연산자를 사용하면 된다.

> db.newCollection.find({score: {$gt: 70, $lte:90}})
{ "_id" : ObjectId("596531cd4c67f4aa968bebe0"), "score" : 80 }
{ "_id" : ObjectId("596531d04c67f4aa968bebe1"), "score" : 85 }
{ "_id" : ObjectId("596531d24c67f4aa968bebe2"), "score" : 90 }

정규식을 사용해 정보를 가져올수도 있다.

db.newCollection.find({name: {$regex: 'min'}})
db.newCollection.findOne({name: {$regex: 'min'}}) #첫번째 결과만 가져오고 싶다면

데이터 갱신

레코드를 갱신하려면 update() 메소드를 사용하고 첫번째 인자에 쿼리문, 두번째인자에 변경값을 넣어준다.

db.newCollection.update({name: 'minwah'}, {boyfriend: "minwoo"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.newCollection.find()
{ "_id" : ObjectId("596532ef4c67f4aa968bebe4"), "boyfriend" : "minwoo" }

update 메소드에서 주의 할 점은 두번째 인자가 기존에 있는 정보를 단순히 추가하거나 존재하는 필드값을 변경하는게 아니라 레코드 전체를 덮어쓴다는것이다. 이 문제를 해결하기 위해 $set 연산자를 사용한다.

db.newCollection.update({name: 'minwah'}, {$set : {boyfriend: "minwoo"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.newCollection.find()
{ "_id" : ObjectId("596532ef4c67f4aa968bebe4"), "name": "minwah", "boyfriend" : "minwoo" }

레코드를 갱신하려고 할때 레코드 자체가 존재하지 않는 경우도 있다. 이런 경우에 자동으로 레코드를 생성하고 싶다면 {upsert:true} 를 세번째 인자로 넣어준다.

db.newCollection.update({name: 'seolhyun'}, {$set : {boyfriend: "minwoo"}, {upsert:true}})
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 1,
    "nModified" : 0,
    "_id" : ObjectId("596536162bea1d83be9078b1")
})

> db.newCollection.find({name: 'seolhyun'})
{ "_id" : ObjectId("596536162bea1d83be9078b1"), "name" : "seolhyun", "boyfriend" : "minwoo" }

데이터 삭제

find() 메소드와 거의 흡사하다. 일치하는 데이터를 삭제한다. 모든 데이터를 제거하고 싶다면 drop() 메소드를 사용한다.

db.newCollection.remove({boyfriend:'minwoo'})
WriteResult({ "nRemoved" : 2 })

db.newCollection.drop()

참고

results matching ""

    No results matching ""