2012-04-09 3 views
0

컬렉션 "질문"이
어떻게 자기 정의 순위를 같은 MongoDB에 의해 PHP

{ 
    _id: 
    question: 
    time: 
    click_nums: 
    answers: [ 
     {}, 
     {}, 
     ... 
    ] 
} 

지금 나는이 같은 문제를 평가하고 싶어처럼 상위 5 :

rank_condition = (now_time - time)/24*(click_nums*0.2+nums_of_answers*0.8) 

나는 이것을 어떻게 실현할 수 있는가? 나는 몽고 트의 최신 버전이다 ...

spacial : PHP로 실현!

+0

나는 당신이 당신의 어플리케이션에서 그것을해야한다고 말하고 싶습니다. 어쩌면 새로운 집계 프레임 워크가이를 수행 할 수는 있지만 더 효율적이지는 않을 것입니다. MongoDB의 어떤 버전을 사용하고 있습니까? – Thilo

+0

2.0.4 그리고 나는 이렇게해야만한다. 나는 50,000이라는 큰 질문을 가지고있다. – tinybai

답변

2

MongoDB는 필드 값에만 (현재) 정렬 할 수 있습니다. 복잡한 표현식을 지원하지 않습니다 (SQL의 ORDER BY에서와 같이). 새로운 집계 프레임 워크는 실제로 여기서 도움이 될 수 있습니다. 응용 프로그램의

  1. 순위 :

    당신은 세 가지 옵션이 있습니다. 이것은 구현하기가 가장 쉽습니다.

  2. 순위를 계산 (순위를 계산하고 업데이트하는주기적인 백그라운드 작업 실행). 이것은 가장 효율적인 쿼리 방법입니다 (약간 오래된 데이터가 발생할 수 있음).

  3. Aggregation Framework (2.2 및 최신 불안정에서 사용 가능)을 사용하십시오. 이것은 "가장 멋진"방법입니다. (당신은 새로운 장난감으로 놀아요 :))

+1

단지 50.000 개의 문서로, (아마도) (어쩌면 다른 콜렉션에서) 어딘가에서 결과를 캐싱과 결합했을 것이다. 일정 기간. – Thilo