我在某些文档中有比赛参与者数据,这些数据是按照比赛阶段,跑步者位置和跑步者经过舞台的时间来组织的。
我需要找到一个特定的围嘴(?key = 357),并抓住它最后一次通过一个阶段(doc.bib_data [i] .time),该阶段是(id)和位置(i)。
如果指定特定的bib_data数组索引,则会得到结果,但是如果遍历bib_data,即使没有进行任何过滤,也不会得到任何结果。
使用特定索引查看,以显示文档数据是什么样的:
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
以及我试图遍历bib_data的VIEW:
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 );
}
}
}
未返回任何结果。
查看代码
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);
}
}
}
完全不正确,因为它试图对bib_data
进行索引,就好像它是一个数组,但它是一个对象。因此,请先修复[[1]:
function (doc) {
for (var key in doc.bib_data) {
if (doc.bib_data.hasOwnProperty(key)) {
var item = doc.bib_data[key];
/* do something with the bib item. */
}
}
}
现在是时候发射感兴趣的数据了。尚不清楚您的帖子中需要什么,但这是一个开始,请注意,我发出的似乎是数字,而不是字符串:
function (doc) {
for (var key in doc.bib_data) {
if (doc.bib_data.hasOwnProperty(key)) {
var item = doc.bib_data[key];
if(item.bib) {
emit([parseInt(item.bib), parseInt(key), item.time]);
}
}
}
}
鉴于您发布的文档是数据库中唯一的文档,其设计文档和视图名称使用cURL为bib
:
curl -G <url to db>/_design/bib/_view/bib
将返回
{“ total_rows”:3,“ offset”:0:“ rows”:[{“ id”:“ 007”,“ key”:[22,3,“ 1910:40”],“ value”:null},{“ id”:“ 007”,“ key”:[45,1,“ 1910:35”],“ value”:null},{“ id”:“ 007”,“键”:[357,2,“ 1910:38”],“值”:空}]}
因为bib
视图正在生成一个复杂的密钥,所以必须使用start_key
和end_key
查询[2]。因此,要获取bib
为357的查看文档,>
curl -G <url to db>/_design/bib/_view/bib -d "start_key=[357]" -d "end_key=[357,{}]"
将返回
{“ total_rows”:3,“ offset”:2,“ rows”:[{“ id”:“ 007”,“ key”:[357,2,“ 1910:38”],“ value”:null}]}
我在合并索引/关键字方面没有看到太多实用程序,也许您想要这个呢?
emit([parseInt(item.bib), item.time], parseInt(key));