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

时间:2011-11-10 18:18:11

标签: couchdb key

我有一个名为“report_data_by_date”的视图,基本上就是这样:

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

我收回了预期的结果。

但是,当我尝试使用密钥查询(仅匹配某些日期)时,如此(但正确的URL编码):

http://.../_design/ReportMetaData/_view/report_data_by_date?key=[2011,{},{},{},{},{},{}]

我得到这样的东西:

{"total_rows":16,"offset":16,"rows":[]}

其中rows是一个空数组。我希望能够找回2011年的行。

我觉得我错过了一些非常微不足道的事情,但是尽管我找不到答案,我还是找不到答案。

感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

它没有返回的原因是你可能没有完全键:[2011,{},{},{},{},{},{}] in你的数据。视图的关键参数只会返回完全匹配。

如果您想要2011年的所有密钥,您可能需要使用 startkey endkey 。我没有测试你的确切查询,但它可能看起来像这样:

report_data_by_date startkey = [2011]&安培; endkey = [2011,{},{},{},{},{},{}]

答案 1 :(得分:1)

我认为对您有帮助的是使用查询参数 startkey endkey

我使用以下两个文档

填充了测试数据库
{"_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]}

如果我使用示例中的参数检索您的视图,我将无法返回任何结果,因为没有包含report_completed_timestamp字段且具有该值的文档。要获取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]}}

]}

查看Apache wiki以获取更多信息:http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options