CouchDB JSon响应自定义

时间:2013-05-28 06:48:05

标签: database json couchdb

我正在将地址数据存储在Couchdb中,我正在寻找一种方法来获取只有值的数组,而不是每个记录的key:value。

这是当前的回复:

{"total rows": 2438, "offset": 0, "rows":[
    {"id": "ec5de6de2cf7bcac9a2a2a76de5738e4", "key": "user_298774", "value": {"city": "Milano", "address":"Corso Como, 42b"},
    {"id": "a2a2a76de573ae4ec5de6de2cf7bcac9", "key": "user_276341", "value": {"city": "Vicenza", "address":"Via Quinto Sella, 118"}
    ... (etc).
]}

我真的需要:

[{"city": "Milano", "address":"Corso Como, 42b"},
 {"city": "Vicenza", "address":"Via Quinto Sella, 118"},
...]

我真的需要最小化JSON响应消耗的带宽使用。我似乎无法找到将视图转换为简单数组的方法。建议?

1 个答案:

答案 0 :(得分:3)

您获得的响应符合Couch基于REST的协议。要重新格式化,我们提供了两种方法:show functionslist functions。基本思路是一样的,但第一个适用于检索文档,列表功能适合你!

list函数在服务器内部运行查询,并使用您的JS代码发送任意变换的输出。您需要的API很简单:

  • 使用getRow()功能从视图中获取每条记录。
  • 使用obj将JS对象toJSON(obj)导出到字符串(包含JSON)。
  • 使用send(json)将结果发送到客户端。

如果包含数据的地图/缩小视图网址为/mydb/_design/myapp/_view/mydocs-by-user且列表函数名称为mylist,则会将重新格式化的结果发送给具有网址/mydb/_design/myapp/_list/mylist/mydocs-by-user的客户端。

请参阅上面列出的列表功能文档以及“指南”中的“渴望教程”一章。