Couchdb 查看 return 行

Couchdb views return rows in rows

我正在尝试创建一个视图,其中return名称与文档中的价格变化。

"name": "USD"
"price_changes": {
    "0min": 0,
    "15min": 0,
    "30min": 0,
    "60min": 0,
    "90min": 0,
    "120min": 0,
    "150min": 0,
    "180min": 0,
    "210min": 0,
    "240min": 0,
    "270min": 0,
    ...

我想要的是 return 中 "price_changes" 中所有数据的视图。

{"id":"c95718ebd00b13bc9a8b03a0e5005d51",
"key": {"0min":0,"15min":0,"30min":0,"60min":0,"90min":0,"120min":0,"150min":0,...}
{"id":"c95718ebd00b13bc9a8b03a0e5006906",
"key": {"0min":0,"15min":0,"30min":0,"60min":0,"90min":0,"120min":0,"150min":0,...}
...

并查看 return 一组行,例如每个名称只有“0mins”、“15mins”和“30mins”。

喜欢:

"id":"c95718ebd00b13bc9a8b03a0e5005d51",
"name": "USD", 
"key": {"0min":0,"15min":0,"30min":0}

分别

"id":"c95718ebd00b13bc9a8b03a0e5006906",
"name": "GBP", 
"key": {"0min":0,"15min":0,"30min":0}

我目前拥有的是(但不是 return 我想要的):

function (doc) {
var mins, value;
if (doc.price_changes) {
  for (mins in doc.price_changes) {
    value = doc.price_changes[mins];
    emit(doc.id, [value], mins);
    }
  }
}

伙计们有什么想法吗?我在 return 这样的数据上找不到任何东西。

首先,在您的视图地图函数中,您发出了三样东西:

emit(doc.id, [value], mins);

这不是应该的。 As documented,你需要发出 key/value 对(好吧,当然,键或值可以是很多东西的数组):

Map functions accept a single document as the argument and (optionally) emit() key/value pairs that are stored in a view.


据你所说:

What I want is a view that returns all the data in "price_changes".

我的理解是你需要下面的地图函数:

function (doc) {
  var mins, value;
  if (doc.price_changes) {
    for (mins in doc.price_changes) {
      value = doc.price_changes[mins];
      emit(mins, [value, doc._id]);
    }
  }
}

它 returns:

$ curl -k -X GET https://admin:****@192.168.1.106:6984/sample-repl/_design/price/_view/price
{"total_rows":11,"offset":0,"rows":[
{"id":"so_q","key":"0min","value":[0,"so_q"]},
{"id":"so_q","key":"120min","value":[0,"so_q"]},
{"id":"so_q","key":"150min","value":[0,"so_q"]},
{"id":"so_q","key":"15min","value":[0,"so_q"]},
{"id":"so_q","key":"180min","value":[0,"so_q"]},
{"id":"so_q","key":"210min","value":[0,"so_q"]},
{"id":"so_q","key":"240min","value":[0,"so_q"]},
{"id":"so_q","key":"270min","value":[0,"so_q"]},
{"id":"so_q","key":"30min","value":[0,"so_q"]},
{"id":"so_q","key":"60min","value":[0,"so_q"]},
{"id":"so_q","key":"90min","value":[0,"so_q"]}
]}

我不确定上面的结果是不是你想要的,如果我错了请告诉我。


Thanks! Just wondering how would I return say the first 3 (like: 0min, 15min, 30min)

要获取前 3 个,您可以像这样使用 limit 查询参数,如您所见,它将 return 前 3 个:

$ curl -k -X GET https://admin:****@192.168.1.106:6984/sample-repl/_design/price/_view/price?limit=3
{"total_rows":11,"offset":0,"rows":[
{"id":"so_q","key":"0min","value":[0,"so_q"]},
{"id":"so_q","key":"120min","value":[0,"so_q"]},
{"id":"so_q","key":"150min","value":[0,"so_q"]}
]}

一般来说,您可以使用 query parameters 从 view/index 中获得您想要的东西。