2010-01-24 4 views
3

배열 내의 항목 수에 따라 정렬 된 항목 모음을 선택하고 싶습니다. 나는 적어도 가진 사람들에게 가장 태그를 가진 사람에서 주문한 모든 Thing의를 검색하고 싶습니다MongoMapper가있는 배열의 크기에 따라 MongoDB에서 항목을 주문 하시겠습니까?

class Thing 
    include MongoMapper::Document 

    key :name, String 
    key :tags, Array 
end 

: 희망 다음 예는 내 오히려 가난한 설명을 명확히한다. 이 예제의 태그는 태그 배열 내의 문자열입니다. 기본적으로 나는 이것과 같은 것을 의미하는 무언가를 원한다. (그러나 작동한다.)

Thing.all(:order => 'tags.count desc') 

이것은 가능한가?

답변

3

코어 서버는 현재 배열의 크기를 계산 한 다음이를 기준으로 정렬을 지원하지 않습니다. 나는 그 순간에 최선의 방법은 배열 크기를 스스로 캐시하고 그 필드에 인덱스를 추가하는 것이라고 생각한다.

class Thing 
    include MongoMapper::Document 

    key :name,  String 
    key :tags,  Array 
    key :tag_size, Integer, :default => 0, :index => true 
end 

그런 다음 저장시 tag_size를 업데이트하는 모델에 콜백을 추가하십시오. 이 당신이 코어 서버에보고 싶은 기능이있는 경우

, 당신은 여기에 케이스를 추가 할 수 있습니다

http://jira.mongodb.org/browse/SERVER

+0

아, 공정을 충분히 - 나는 그것이 지원 가정. 그래도 대체 제안을 해줘서 고마워, 그게 내 최선의 방법 같아. –

관련 문제