我在一些文档中得到了比赛参与者的数据,这些数据是按比赛阶段、跑步者的位置和跑步者通过阶段的时间组织的。
我需要找到一个特定的bib(?key=357),并获取它最后一次经历某个阶段的时间(doc.bib_data[i].time),它是哪个阶段(id)和位置(i)。
如果指定特定的bib_data数组索引,则会得到结果,但如果循环遍历bib_data,则不会得到任何结果,即使不过滤任何内容。
带有特定索引的VIEW,以显示文档数据的外观:
function (doc, meta) {
emit(doc.bib_data[2].bib,doc.bib_data[2].time);
}
结果:
{
"id": "007",
"key": "357",
"value": "1910:38",
"doc": {
"_id": "007",
"_rev": "4-bdce057c8ad2ce975b9ffca9eb9dfd82",
"ew_ham": "KM6WKA",
"stage_ew_ham": "KK6DA",
"bib_data": {
"1": {
"bib": "45",
"time": "1910:35"
},
"2": {
"bib": "357",
"time": "1910:38"
},
"3": {
"bib": "22",
"time": "1910:40"
}
}
}
}
如何仅获得“bib:357”的结果?
我需要收集阶段、位置和时间,即[“007”、“2”、“1910:38”]
"2": {
"bib": "357",
"time": "1910:38"
},
以下是我当前的问题:
http://[IP_ADDR]:5984/[DB_NAME]/_design/[DESIGN_DOC]/_view/[VIEW_NAME]?key=123
我的VIEW试图循环bib_data:
function (doc, meta) {
for(i=0;i<doc.bib_data.length;i++) {
if(doc.bib_data[i].bib) {
emit( i, doc.bib_data[i].bib, doc.bib_data[i].time );
}
}
}
不返回任何结果。
1条答案
按热度按时间lsmepo6l1#
视图代码
这是完全错误的,因为它试图索引迭代
bib_data
,就好像它是一个数组,但 * 它是一个对象 *。现在是时候发出感兴趣的数据了。虽然还不清楚你的帖子想要什么,但这里有一个开始,注意我发出的是看起来像数字的数据,而不是字符串:
假设您发布的文档是数据库中唯一一个design doc和view name为
bib
的文档,请使用cURL:将返回
{“总行数”:3,“偏移量”:0,“行数”:[
{【编号】:【007】,【关键字】:[22,3,“1910:40”],“价值”:空},
{【编号】:【007】,【关键字】:[45,1,“1910:35”],“价值”:空},
{【编号】:【007】,【关键字】:[357,2,“1910:38”],“价值”:空值}
]}
因为
bib
视图生成了一个复杂的键,所以必须使用start_key
和end_key
查询[2]。将返回
{“总行数”:3,“偏移量”:2,“行数”:[
{“编号”:“007”,“密钥”:[357,2,“1910:38”],“值”:空}
]}
我没有看到合并索引/键有多大的实用性-也许你想要这个代替?
1个
2/{数据库}/_设计/{数据文档}/_视图/{视图}