搜索视图嵌套数组
Search view nested arrays
我在一些文档中有比赛参与者数据,按比赛阶段、跑步者位置和跑步者通过阶段的时间组织。
我需要找到一个特定的号码布 (?key=357) 并获取它最后一次通过一个阶段的时间 (doc.bib_data[i].time),它是哪个阶段 (id) 和位置㈠。
如果我指定一个特定的 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 );
}
}
}
其中returns没有结果。
查看代码
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. */
}
}
}
现在是时候发出感兴趣的数据了。您的 post 需要什么不是很清楚,但这是一个开始,请注意我发出的似乎是数字而不是字符串的数字:
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 post编辑的文档是数据库中唯一具有设计文档和视图名称 bib
的文档:
curl -G <url to db>/_design/bib/_view/bib
将return
{ "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", "key": [357,2,"1910:38"], "value": null}
]}
因为 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,{}]"
将return
{"total_rows":3,"offset":2,"rows":[
{"id":"007","key":[357,2,"1910:38"],"value":null}
]}
我没有看到合并 index/key 有多大用处 - 也许你想要这个?
emit([parseInt(item.bib), item.time], parseInt(key));
1Iterate through object properties
2 /{db}/_design/{ddoc}/_view/{view}
我在一些文档中有比赛参与者数据,按比赛阶段、跑步者位置和跑步者通过阶段的时间组织。
我需要找到一个特定的号码布 (?key=357) 并获取它最后一次通过一个阶段的时间 (doc.bib_data[i].time),它是哪个阶段 (id) 和位置㈠。
如果我指定一个特定的 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 );
}
}
}
其中returns没有结果。
查看代码
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. */
}
}
}
现在是时候发出感兴趣的数据了。您的 post 需要什么不是很清楚,但这是一个开始,请注意我发出的似乎是数字而不是字符串的数字:
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 post编辑的文档是数据库中唯一具有设计文档和视图名称 bib
的文档:
curl -G <url to db>/_design/bib/_view/bib
将return
{ "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", "key": [357,2,"1910:38"], "value": null}
]}
因为 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,{}]"
将return
{"total_rows":3,"offset":2,"rows":[
{"id":"007","key":[357,2,"1910:38"],"value":null}
]}
我没有看到合并 index/key 有多大用处 - 也许你想要这个?
emit([parseInt(item.bib), item.time], parseInt(key));
1Iterate through object properties
2 /{db}/_design/{ddoc}/_view/{view}