결론부터 말하자면 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})




[참조]

$elemMatchhttp://docs.mongodb.org/manual/reference/projection/elemMatch/

$ (positional operator)http://docs.mongodb.org/manual/reference/operator/positional/












Posted by bloodguy
,