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

Couchdb 查询多个特定键后按日期排序,couchdb,Couchdb,文件结构: { "Type":"post" "LastModified":"2010-11-01 21:55", "CategoryID":3, "ID":12 } 拥有一堆不同类别的博士后是很棒的。但我似乎不知道在选择类别3和类别5中的文档时,如何创建一个视图,返回按日期排序的文档。类别未知,限制查询仍应有效 我尝试了不同的观点,但都没有达到预期的效果 在SQL中,可能可以通过以下方式完成: SELECT * FROM document WHERE document.Cate

文件结构:

{
  "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变得更聪明一点吗?

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

  • 在映射函数中同时发出
    CategoryID
    LastModified

    function(doc) {
        emit([doc.CategoryID, doc.LastModified], null);
    }
    
    现在,您可以查询视图中的
    ?startkey=[3]&endkey=[3,{}]
    ,以获取所有
    CategoryID=3
    的文档,这些文档按
    lastmedited
    排序。要获取多个CategoryId的文档,需要合并已排序的结果

  • 用于构建索引。couchdb-lucene可以处理复杂的查询


  • 你试过couchdb邮件列表吗?我想他们可能会建议将给定类别集合的所有记录拉入一个单独的数据库,该数据库的视图由“LastModified”键控是的,这太复杂了。我想我必须使用to调用,一个是获取带有[category,date]的posts键,然后选择必要的类别,并将POST发送到视图,只获取doc.id,然后进行手动排序,然后再请求实际的文档。