2017-04-14 8 views
1

나는 sum(col2)이의 sum의 모든 값을 의미 곳 결과가 col1/sum(col2)Cloudant 사용자 정의 정렬

의 비율의 내림차순으로 정렬보고 싶은 내 데이터를 col2. 나는 구름에 약간 새롭기 때문에 이것을 접근하는 가장 좋은 방법이 무엇인지 모르겠다. 몇 가지 옵션을 생각해 볼 수 있습니다.

  1. 또한 새 열 col1/sum(col2)를 작성, sum(col2)에 대한 새 열을 만들고 각 레코드에 대한 col2
  2. 의 새 값으로 계속 업데이트. 그런 다음이 열을 정렬 할 수 있습니다.
  3. 보기을 사용하면 비율과 합계를 계산할 수 있습니다. 이렇게하면 새 열을 저장할 필요가 없으며 각 업데이트마다 값 비싼 계산을 수행 할 필요가 없습니다.

내가보기를 만들려고하고지도 기능은

function (doc) { 
    emit(doc._id, {"col1_value":doc.col1,"col2_value":doc.col2}); 
} 

쉽게 충분하지만 나는 내가 액세스하는 방법에 대한 아무 생각이

function (keys, values, rereduce) { 
    if (rereduce) { 
    return sum(values); 
    } else { 
    return values.length; 
    } 
} 

줄이거 템플릿에 의해 혼란 스러워요 두 개의 열 값을 합친 다음 여기에서 집계하십시오. 이것은 가능한가? 필요한 결과를 얻을 수있는 다른 방법이 있습니까?

답변

2

두 의견 : X/sum(Y)에 의해

  1. 주문이 X으로 주문과 동일 (또는 -X 경우 sum(Y)에 의해 부정적이다). 따라서 주문을 위해서는 X으로 주문하고 번거롭지 마십시오.

  2. 실제로는 X/sum(Y)의 값을 알고 싶어하고 그 값으로 주문하는 것이 아니라고 가정하면 CouchDB에서 이것을 수행 할 수있는 한 걸음도 방법이 없습니다. 내가 생각할 수있는 가장 좋은 방법은 전체를 제공하는지도/축소보기를 만드는 것입니다. sum(Y). 그런 다음 간단한 쿼리로 그 합을 가져올 수 있으며 문서를 가져올 때 응용 프로그램에서 계산을 수행 할 수 있습니다.

+0

예. 감사합니다. 합계 (Y)를 계산하는 뷰를 어떻게 작성해야합니까? – AbtPst

+0

보기 및지도/감추기 기능에 대해 읽어 보시기 바랍니다. 몇 가지 제안 된 출발점 : [here] (https://wiki.apache.org/couchdb/Introduction_to_CouchDB_views), [here] (http://www.ramblingincode.com/building-a-couchdb-reduce-function/) 및 [여기] (https://wiki.apache.org/couchdb/Built-In_Reduce_Functions). – Flimzy