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(query, projection)
db.collection.find(query, projection)
특정 범위의 값을 검색하고 나서 특정 필드(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)
'mongodb' 카테고리의 다른 글
[mongodb] 3.0부터 ensureIndex는 deprecated됨 (0) | 2015.10.12 |
---|---|
[mongodb] insert와 save의 차이점 (0) | 2015.10.11 |
[mongodb] index (색인) 속성 (0) | 2015.10.09 |
[mongodb] 색인 타입(index type) 공부 (0) | 2015.10.09 |
[mongodb] collection의 항목 삭제 및 trucate하기 (0) | 2015.10.02 |