2013-03-26 1 views
1

로그 메시지를 저장하는 데이터베이스가 있습니다. 각 메시지에는 우선 순위, 날짜메시지에 대한 정보가 들어 있습니다. 응용 프로그램은 우선 순위에 따라 제한 될 수있는 로그 메시지를 날짜별로 정렬하여 쿼리 할 수 ​​있어야합니다. 그래서 [doc.priority, doc.date]의 키 by_priority라는 뷰를 만들 수 있습니다, 나는 쉽게 다음과 같은 요청에 적어도 $X의 우선 순위 값으로 모든 메시지를 조회 할 수 있습니다로직을 복제하지 않고 뷰 출력의 범위에 영향을주는 변경 사항을 쿼리하십시오.

GET $database/_design/$design/_view/by-priority?startkey=[$X]&endkey=[{}]

지금 나는를 확장 할 도착한 경우 지정된 기준에 따라 새 메시지를 자동으로 가져 오는 응용 프로그램입니다. 나는 다음과 같은 요청합니다 (prio 쿼리 매개 변수와 함께 전달) 적어도 $X의 우선 순위와 메시지를 선택 min_priority라는 필터를 추가하고하여이 작업을 수행 할 수 있습니다

GET $database/_changes?filter=$design/max_priority&prio=$X

을하지만 내가해야 함을 의미 startkeyendkey에 대한 값을 구성하여 클라이언트뿐만 아니라 서버에서 (필터 기능을 통해) 선택 논리 (최소, 최대, 우선 순위 범위, 우선 순위 날짜)를 복제하십시오.

동일한 로직을 두 번 구현하는 것이 실제로 필요한가요?

또는보기와 필터 함수간에 문서의 키 - 값 쌍을 생성하는 코드를 공유하는 것이 최소한 가능합니까? 이 방법은보기 기능을 호출하고 startkeyendkey 매개 변수를 받아들이는 각보기에 대한 일반 필터 함수를 가질 수 있습니다. 또한 키 비교를위한 CouchDB의 알고리즘에 액세스하는 방법이 필요합니다. 거기에 JavaScript에서 액세스 할 수있는 함수가 있습니까?

답변

0

현재보기 및/또는 필터간에 코드를 중복 제거 할 수는 없지만 그러한 종류의 기능에 대한 액세스를 제공하는 쿼리 서버는 분명히 상상할 수 있습니다.

관련 문제