我有一个名为“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年的行。
我觉得我错过了一些非常微不足道的事情,但是尽管我找不到答案,我还是找不到答案。
感谢您的帮助!
答案 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