Couchdb 映射复合键排序

Couchdb 映射复合键排序,couchdb,Couchdb,我尝试从couchdb显示应用程序的日志条目-每个日志条目包含时间戳、日志标记和客户端的远程IP,我的映射函数是: { "_id": "_design/log", "language": "javascript", "views": { "browse": { "map": "function(doc){ if (doc.type=='log') {emit([doc.date,doc.tag,doc.ip], doc);}}" }

我尝试从couchdb显示应用程序的日志条目-每个日志条目包含时间戳、日志标记和客户端的远程IP,我的映射函数是:

{
"_id": "_design/log",
"language": "javascript",
   "views": {
       "browse": {
           "map": "function(doc){ if (doc.type=='log') {emit([doc.date,doc.tag,doc.ip], doc);}}"
       }
   }
}
现在如何获取按日期排序的指定IP(标签)的日志条目?


已经尝试过的版本:/\u design/log/\u view/browse?startkey=[“info”,“8.8.8.8”]没有成功。

开始键需要3个元素:日期、标记和ip

不成功的查询在开始键中只有2个元素

有一些关于复合键的文档。在所使用的示例中,它们对年、月和日具有不同的键。您可以在本书中找到示例:

映射函数:

function(doc) {
  if (doc.type === 'log') {
    emit([doc.tag, doc.ip, doc.date], 1);
  }
}
查询参数(正确的url编码):


结果按日期排序,因为标记和ip是固定的。

我不输入“日期”键,因为我想要ip 8.8.8.8的所有“信息”项。如果在map reduce函数中重新排序键,使日期键是最后一个而不是第一个,会怎么样?reduce的结果没有排序,因此我不会按日期顺序得到结果。发出[tag,ip]可能会在reduce中提供一些排序变体。能否为开始键的第一个元素传递正则表达式?问得好!,我发现只有{}可以作为“最后一个元素”这没关系,但是我如何才能得到所有按日期排序的“信息”条目呢另一种观点?也许吧。CouchDB中的视图类似于关系数据库中的索引:如果需要按给定字段进行查询/排序,则需要一个视图,或者可以在客户机上对结果进行筛选/排序,或者可以使用。没有一个好的响应,您需要针对您的用例评估每个解决方案的优缺点。
?startkey=["info","8.8.8.8"]&endkey=["info","8.8.8.8",{}]&include_docs=true