查询多个特定键后的日期排序

时间:2010-11-08 18:58:55

标签: couchdb

文件结构:

{
  "Type":"post"
  "LastModified":"2010-11-01 21:55",
  "CategoryID":3,
  "ID":12
}

在不同类别中拥有大量不同的博文文章非常棒。但我似乎无法弄清楚如何制作一个返回按日期排序的文档的视图,当选择例如类别3和5中的文档时。类别未知,限制查询应该仍然有效。

我尝试过不同的视图方法,但没有任何方法可以达到预期的效果。

在SQL中,它可以通过以下方式完成:

SELECT * FROM document WHERE document.CategoryID in (3,5) ORDER BY document.LastModified DESC;

我可以查询这样的视图所需的次数,手动排序和分页数据:

function(doc) {
  emit(doc.CategoryID, doc.ID);
}

所以有人知道是否可以避免这样做,并且让couchdb更聪明一点?

1 个答案:

答案 0 :(得分:5)

我可以想到两种可能的解决方案。

  1. 在地图功能中发出CategoryIDLastModified

    function(doc) {
        emit([doc.CategoryID, doc.LastModified], null);
    }
    

    现在,您可以查询?startkey=[3]&endkey=[3, {}]的视图,以获取CategoryID=3LastModified排序的所有文档。要获取多个CategoryID的文档,您需要合并排序结果。

  2. 使用couchdb-lucene构建索引。 couchdb-lucene可以处理复杂的查询。