mongodb 검색하는 예제이다.


입력은 3건으로 한다.


> db.user.insert({_id:1,name:'samuel',part:'server',title:'developer'})

> db.user.insert({_id:2,name:'jason',part:'server',title:'developer'})

> db.user.insert({_id:3,name:'kaley',part:'client',title:'developer'})



전체 목록을 보려면 find()로 검색한다.


> db.user.find()

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }

{ "_id" : 2, "name" : "jason", "part" : "server", "title" : "developer" }

{ "_id" : 3, "name" : "kaley", "part" : "client", "title" : "developer" }




{}을 넣으면 all document를 의미한다.


> db.user.find({})

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }

{ "_id" : 2, "name" : "jason", "part" : "server", "title" : "developer" }

{ "_id" : 3, "name" : "kaley", "part" : "client", "title" : "developer" }




최근에 입력한 순서대록 목록을 보려면 find()에 sort() 를 이용한다.


> db.user.find().sort( { _id: -1 } )

{ "_id" : 3, "name" : "kaley", "part" : "client", "title" : "developer" }

{ "_id" : 2, "name" : "jason", "part" : "server", "title" : "developer" }

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }



첫번째 요소만 보려면 findOne()을 실행한다.


> db.user.findOne()

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }




find()에 조건을 사용할 수 있다. 


> db.user.find({_id:1})

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }


> db.user.find({part:'server'})

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }

{ "_id" : 2, "name" : "jason", "part" : "server", "title" : "developer" }




만약 조건에 동일한 필드로 검색하면, 가장 뒤에 정의한 필드로 조건 검색을 진행한다.


> db.user.find({part:'server', part:'client'})

{ "_id" : 3, "name" : "kaley", "part" : "client", "title" : "developer" }




범위를 지정해서 검색할 수 있다. 수치 뿐 아니라 문자열도 검색 가능하다.


> db.user.find({ name: { $gt:'k', $lt:'l' } })

{ "_id" : 3, "name" : "kaley", "part" : "client", "title" : "developer" }





서로 다른 필드를 이용하여 AND 이용하기


> db.user.find({part:'server', name:'samuel'})

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }





서로 다른 필드를 이용하여 OR을 사용하려면 $or 구문을 사용한다.


> db.user.find({ $or:[ {part:'server', title:'developer'} ] })

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }

{ "_id" : 2, "name" : "jason", "part" : "server", "title" : "developer" }




질의를 풀어쓰면 이렇다.

> db.user.find(

 { 

   $or: [ 

      {part:'server', title:'developer'} 

    ] 

 }

)




OR 문 사용시 필드명을 여러번 쓰면, 맨 뒤에것만 적용된다.


> db.user.find({ $or:[ {part:'server', part:'client'} ] })

{ "_id" : 3, "name" : "kaley", "part" : "client", "title" : "developer" }




AND와 OR를 같이 쓸 수 있다. 

> db.user.find({ name:'samuel', $or:[ {part:'server', title:'developer'} ] })

{ "_id" : 1, "name" : "samuel", "part" : "server", "title" : "developer" }



find(), findOne() 함수는 projection이라는 매개변수를 더 받을 수 있다.

함수원형을 보면 다음과 같다.


db.collection.findOne(queryprojection)

db.collection.find(queryprojection)




특정 범위의 값을 검색하고 나서 특정 필드(name)을 제외한 나머지(id, part, title)은 모주 제외하고 싶다면 사용할 수 있다.


> db.user.find({ name: { $gt:'k', $lt:'l' } }, {_id:0, part:0, title:0})

{ "name" : "kaley" }




다중 결과가 나오더라도 하나의 결과만 보고 싶다면, limit()함수를 사용한다.


> db.user.find({ name: { $gt:'a', $lt:'z' } }, {_id:0, part:0, title:0})

{ "name" : "samuel" }

{ "name" : "jason" }

{ "name" : "kaley" }

> db.user.find({ name: { $gt:'a', $lt:'z' } }, {_id:0, part:0, title:0}).limit(1)

{ "name" : "samuel" }




limit 결과에서 여러 값을 skip해서 다른 정보를 더 볼 수 있다. 


> db.user.find({ name: { $gt:'a', $lt:'z' } }, {_id:0, part:0, title:0}).limit(1).skip(1)

{ "name" : "jason" }

> db.user.find({ name: { $gt:'a', $lt:'z' } }, {_id:0, part:0, title:0}).limit(1).skip(2)

{ "name" : "kaley" }

> db.user.find({ name: { $gt:'a', $lt:'z' } }, {_id:0, part:0, title:0}).limit(1).skip(3)







Posted by 김용환 '김용환'

댓글을 달아 주세요