결론부터 말하자면 MongoDB 2.2 버전 미만에서는 아래의 2가지 방법 밖에 없음.
1. 다 가져오고 client side 에서 필터링
2. MongoDB Map/Reduce
다음은 2.2 버전 이상에서만 가능한 케이스.
일단 날짜별 방문자 리스트를 저장하는 아래와 같은 데이터가 있다고 치자.
{
date: '2013-05-20',
visitor: [
{name:'백충덕', age:34},
{name:'조조', age:48},
{name:'관우', age:30}
]
}
저런 형태의 데이터가 날짜별로 주루룩 있다고 했을 때,
2013년 5월 20일 방문자 리스트를 가져오려면 아래와 같이 하면 됨.
// 날짜 정보 없이 visitor만
db.col.find({date:'2013-05-20'}, {date:0, visitor:1})
여기서 query를 하나 더 넣어서 visitor 중에 age가 30인 데이터만 가져오려면 아래의 2가지 방법을 사용할 수 있다.
// 1. $elemMatch
db.col.find({date:'2013-05-20'}, {date:0, visitor:{$elemMatch:{age:30}}})
// 2. positional operator를 projection operator 로 사용
db.col.find({date:'2013-05-20', 'visitor.age':30}, {date:0, 'visitor.$':1})
[참조]
$elemMatch : http://docs.mongodb.org/manual/reference/projection/elemMatch/
$ (positional operator) : http://docs.mongodb.org/manual/reference/operator/positional/
'DataBase' 카테고리의 다른 글
[MongoDB] 샤딩된 레플리카셋 멤버변경 (sharded replica set reconfig) (0) | 2013.07.24 |
---|---|
[MongoDB] Hash-based Sharding (0) | 2013.05.30 |
[SQLite3] 테이블 존재 여부 체크 (check table exists) (0) | 2013.04.15 |
[SQLite3] INSERT/UPDATE 속도 높이기 (increase write speed) (0) | 2013.01.17 |
[MongoDB] PHP에서 db, collection 상태확인 (php driver, stats) (0) | 2012.11.15 |