2012-05-14 56 views
0

尝试从特定帐户列表(使用帐户ID)检索事件列表,并按日期对这些事件进行排序。CouchDB:按帐户ID列表筛选并按日期排序

这里是我当前的地图功能:

function(doc) { 
    if (doc.doc_type == 'event' && doc.account_id) { 
     emit([doc.date_start,doc.account_id],doc); 
    } 
} 

在蒲团所有帐户运行时,此输出正确的数据,但是,我对如何构建我的请求查询或者我是否需要修改我不清楚映射函数来完成这个任务?重要的是,事件在指定的帐户之一中,并且事件日期按顺序(降序)排序。

回答

0

你有两个选择:

  • 做到为每个帐户查询,客户端上的结果合并:

    function(doc) { 
        if (doc.doc_type === 'event' && doc.account_id) { 
        emit([doc.account_id, doc.date_start], 1); 
        } 
    } 
    

    与查询(正确的URL编码?include_docs=true&startkey=["ACCOUNT_ID"]&endkey=["ACCOUNT_ID", {}]为每个值为account_id。合并过程快速简单,因为结果已按日期排序。

  • 做单查询,客户端上的结果进行排序:

    function(doc) { 
        if (doc.doc_type === 'event' && doc.account_id) { 
        emit(doc.account_id, 1); 
        } 
    } 
    

    查询与?include_docs=true&keys=["ACCOUNT_ID1", "ACCOUNT_ID2", ...]。排序会比较慢,因为结果按account_id排序。

只有测试会告诉你什么是你的用例的最佳选择。

+0

非常感谢Marcello!因为它很容易,所以选择1。 :) –