CouchDB视图返回带有复杂键的空行,用于日期数组比较

CouchDB视图返回带有复杂键的空行,用于日期数组比较,couchdb,key,Couchdb,Key,我有一个叫做“按日期报告数据”的视图,基本上是这样的: function(doc) { if (doc.report_completed_timestamp) { emit(doc.report_completed_timestamp, doc); } } 它会发出这样的东西: { "id": "eade1035fb3dc87baba8bdf64b043c2c", "key": [ 2011,

我有一个叫做“按日期报告数据”的视图,基本上是这样的:

function(doc)
{
  if (doc.report_completed_timestamp)
  {
    emit(doc.report_completed_timestamp, doc);
  }
}
它会发出这样的东西:

{
        "id": "eade1035fb3dc87baba8bdf64b043c2c",
        "key": [
            2011,
            11,
            9,
            14,
            1,
            26,
            305
        ],
        "value": { /*the doc*/}
}
http://.../_design/ReportMetaData/_view/report_data_by_date
{"total_rows":16,"offset":16,"rows":[]}
当我查询视图时,如下所示:

{
        "id": "eade1035fb3dc87baba8bdf64b043c2c",
        "key": [
            2011,
            11,
            9,
            14,
            1,
            26,
            305
        ],
        "value": { /*the doc*/}
}
http://.../_design/ReportMetaData/_view/report_data_by_date
{"total_rows":16,"offset":16,"rows":[]}
我得到了预期的结果

但是,当我尝试使用键进行查询(仅匹配特定日期)时,如下所示(但URL编码正确):

我得到了这样的回复:

{
        "id": "eade1035fb3dc87baba8bdf64b043c2c",
        "key": [
            2011,
            11,
            9,
            14,
            1,
            26,
            305
        ],
        "value": { /*the doc*/}
}
http://.../_design/ReportMetaData/_view/report_data_by_date
{"total_rows":16,"offset":16,"rows":[]}
其中,行是空数组。我希望回到2011年的行列

我觉得我遗漏了一些非常琐碎的东西,但尽管我在寻找,我还是找不到答案


谢谢你的帮助

它不返回的原因是您的数据中可能没有[2011,{},{},{},{},{},{},{}的确切键。视图的关键参数将仅返回精确匹配

如果您希望在2011年获得所有密钥,则可能需要使用startkey和endkey。我尚未测试您的确切查询,但它可能会如下所示:

{
        "id": "eade1035fb3dc87baba8bdf64b043c2c",
        "key": [
            2011,
            11,
            9,
            14,
            1,
            26,
            305
        ],
        "value": { /*the doc*/}
}
http://.../_design/ReportMetaData/_view/report_data_by_date
{"total_rows":16,"offset":16,"rows":[]}

按日期报告数据?startkey=[2011]&endkey=[2011,{},{},{},{},{},{},{}]

我认为使用查询参数startkeyendkey会对您有所帮助

我用以下两个文档填充了一个测试数据库

{"_id":"7bb98a75-99aa-481c-9de4-68b682f63068","_rev":"1-db9e34f664de295c76de4c8049b1de50","report_completed_timestamp":[2011,11,9,14,1,26,305]},
{"_id":"f4453fd3-dc3a-47b4-91a9-b28cc092513c","_rev":"1-4c9e78f384ef64700262c6ec148e8fff","report_completed_timestamp":[2012,1,1,0,0,0]}
如果在您的示例中使用参数检索您的视图,则不会返回任何结果,因为没有具有该值的
报告\u完成时间戳
字段的文档。要获取2011年的文档,请使用以下内容:

http://.../ReportMetaData/_design/test/_view/report_data_by_date?startkey=[2011]&endkey=[2011,12,31,11,59,999]
这产生了您想要的结果:

{"total_rows":2,"offset":0,"rows":[
{"id":"7bb98a75-99aa-481c-9de4-68b682f63068","key":[2011,11,9,14,1,26,305],"value":{"_id":"7bb98a75-99aa-481c-9de4-68b682f63068","_rev":"1-db9e34f664de295c76de4c8049b1de50","report_completed_timestamp":[2011,11,9,14,1,26,305]}}
]}


查看ApacheWiki了解更多信息:

谢谢Ryan,出于某种原因,我觉得我可以在密钥查询中使用{}作为通配符。使用startkey和endkey作为示例解决了我的问题。感谢您的帮助。我想我的困惑在于(显然)无法在基于键的查询中使用我认为是通配符的内容。在查询选项维基中,我没有看到任何为我阐明这一点的东西;我应该读的文档中有什么特别的东西吗?如果你有SQL背景,我会读O'Reilly的书第21章关于CouchDB for SQL Jockes。一般来说,很难说给定任务是否存在通配符选项。