본문 바로가기

Node.js/8. mongodb

8-3 mongodb 기초 쿼리

mongodb 는 기존 rdb와는 구조부터가 다릅니다. 데이블(mongodb 에서는 컬렉션이라 부릅니다만 테이블로 통용하겠습니다.) 의 foreign key 가 없기 때문에 테이블간의 join 이 어려우며 비정형테이블이기 때문에 한테이블내의 데이터 속성이 다를수 있습니다. 또한 쿼리문도 독특하지요. 쿼리문을 보면 오히려 DB 문법이 아닌 javascript 인거 같은 느낌마져 듭니다. 하지만 rdb에서의 백업/리커버리, archive 백업 , 파티션테이블등을 신경쓰지 않기 때문에 개인적으로 배우기엔 더욱 쉬운거 같습니다.

서론이 길었네요! 이전 장은 mongodb 의 저장, 업데이트 , 삭제 , 테이블 삭제등을 알아보겠습니다. 


1. 먼저 몽고디비로 접속합니다.  커맨드 창에 mongo 를 입력하면 몽고비디로 접속됩니다. 

mongo


2. 먼저  insert 쿼리문 입니다.

db.users.insert(
{user_id: "abc123",
age: 55,
status: "A"}
)


여기서 db.users.insert()의  가운데 users 는 데이블이 됩니다. 그리고 테이블이 저절로 생성되면서 데이터가 들어갑니다! (rdb에서는 상상도 못할 일입니다!!) 구문안의 {}에 필드:값 형식이 맞다면 원하는 만큼의 필드/값 을 넣을수 있습니다. 


테이블의 갯수를 져오는 함수는 count()입니다. 현재 테이블엔 하나의 값이 들어있기 때문에 결과는 1이 나옵니다. 

db.users.count()


앞으로 실습을 위해서 추가로 데이터를 넣습니다. 

db.users.insert({user_id:"uiandwe", age:"??", status:'S'})
db.users.insert({user_id:"test", age:"20", status:'C'})
db.users.insert({user_id:"test1", age:"21", status:'C'})
db.users.insert({user_id:"test2", age:"21", status:'C'})
db.users.insert({user_id:"test3", age:"30", status:'D'})
db.users.insert({user_id:"test4", age:"10", status:'B'})
db.users.insert({user_id:"test5", age:"44", status:'D'})
db.users.insert({user_id:"test6", age:"50", status:'D'})



3. 조회 쿼리문(find)

-먼저 조회를 하기전! 현재 디비에서의 생성된 테이블을 확인하고 싶다면 show tables 를 입력하면 됩니다. 

캡쳐화면에서는 2번에서 생성한테이블 users 와 system 테이블이 있습을 알수 있습니다.

show tables


3-1 조회 쿼리문은 테이블을 명시한다음 find()을 넣어주면 됩니다. 해당 테이블의 모든 테이터가 출력 됩니다. 

db.users.find()


3-2 만일 특정 조건의 테이터만을 원한다면 find()내에 명시해주면 됩니다. 예제는 user_id 가 abc123 인 테이터만 출력하는 예제 입니다. 

db.users.find(
{user_id:"abc123"}
)


3-3 또한 구간을 지정해서 조회를 원한다면 $gt 와 $lt , $gte 와 $lte 가 있습니다. $gt는 초과, $lt 는 미만 , $gte는 이상, $lte 는 이하를 뜻합니다.  아래의 예제는 age필드의 값이 20 초과($gt)인 값을 조회하되 user_id , age 필드 데이터만을 출력하는 예제 입니다. 

db.users.find(
{age:{$gt:20}},
{user_id:1, age:1, _id:0}
)


3-4 아래의 예제는 age 가 20 이하($lte)인 데이터를 출력하는 예제 입니다.

db.users.find({age:{$lte:20}},{user_id:1, age:1, _id:0} )




3-5 조회문의 마지막으로 sort 입니다. 해당 필드의 값을 오름차순일 경우엔 않써도 자동 으로 오름차순이 됩니다. 내림차순일경우 해당 필드:-1 을 넣어주면 됩니다 

db.users.find({age:{$gt:20}},{user_id:1, age:1, _id:0}).sort({age:-1})





4. 업데이트문은 4가지의 인자값이 필합니다. 

   1번인자 : 조건 

   2번인자 : 변경값

   3번인자 : 조건에 해당하는 값이 없고 이 값이 true 면 해당값으로 insert , 이 값이 false 면 무시(기본값 false)

   4번인자 : 해당테이블 전체에 적용 true/false (기본값 false)


어려워 보일수도 있으나 1번인자와 2번 인자만 잘 조정해 주면 원하는 값을 변경할수 있습니다. 


4-1 먼저 user_id 가 abc123 일 경우 age를 10으로 변경하는 예제 입니다. (기존 데이터는 55였습니다.)

db.users.update(
{user_id:"abc123"},
{$set:{age:10}}
)


4-2 3번째 인자를 이용하여  age 가 5일경우 user_id를 AAA 로 바꾼다. 만일 없다면 해당 값을 insert 하는 예제 입니다. 이번 예제엔 3번째 인에 true를 넣어줬음을 아셔야 합니다.  

db.users.update(
{age:5},
{$set:{user_id:"AAA"}},
true
)




5. 데이터 삭제! 간단합니다. remove() 에 조건을 넣어주시면 됩니다. 


5-1user_id가 abc123 일 경우 해당 데이터를 삭제 합니다. 

db.user.remove(
{user_id:"abc123"}
)

5-2 만일 age 필드의 값이 20 초과 라면 삭제 합니다. 

db.users.remove(
{age:{$gt:20}}
)

 


5-3 테이블 데이터 전체 삭제. 

db.users.remove()



5-4 테이블 자체를 삭제.

db.users.drop()






'Node.js > 8. mongodb' 카테고리의 다른 글

8-4 mongojs 모듈을 이용한 node.js 예제  (0) 2014.03.27
8-2 windows 에 mongodb 설치  (3) 2014.03.21
8-1 ubuntu에 mongodb 설치  (0) 2014.03.20