从文档中获取单个值

Vad*_*der 6 couchdb

CouchDB中是否有可能从文档中检索单个值?例如,我有一个包含10000个键的文档,如下所示:

{
   "_id": "8098091cc795acde43cd45335373cc92",
   "_rev": "2-6d2e0ac43618388cc958b91e5015bba5",
   "1":"some value",
   "2":"another value",
   ...
   "10000":"last value"
}
Run Code Online (Sandbox Code Playgroud)

我不想每次解析整个文档,只是想获得键"2"的值.这可能吗?

编辑:

当然,在提出这个问题之前,我查看了文档,然后搜索了这个问题,但没有找到这种可能性.但我想知道为什么这是不可能的?根据我的理解,视图和文档之间没有太大的区别,因为它们都是键值对的集合,但是可以?key=...在查询字符串中使用视图中的单个值,而不可能对文档执行相同的操作.为什么?

Jas*_*ith 9

您可以使用CouchDB show函数处理服务器上的文档并将任意数据发送到客户端.显示函数可以执行简单的操作,例如从文档中提取单个值; 或者他们可以转换为完全不同的内容类型,如XML.

例如:

  • 在数据库中 db
  • 其中包含_design/example具有show功能的设计文档one_field
  • 您想要获取带有ID的文档 doc_id
  • 但只检索some_field具有值的字段"I am the some_field value!"

该查询将是:

GET /db/_design/example/_show/one_field/doc_id?name=some_field
Run Code Online (Sandbox Code Playgroud)

show函数看起来像这样:

function(doc, req) {
  // _show function to extract one field

  var field_name = req.query.name; // Set to e.g. "some_field"
  var field_value = doc[field_name];

  return { "code": 200   // HTTP status code
         , "headers":    // Response headers
           { "content-type": "text/plain" }
         , body: field_value
         };
}
Run Code Online (Sandbox Code Playgroud)

设计文档如下所示:

{ "_id": "_design/example"
, "shows":
  { "one_field": ... } // Paste the above function as a string.
}
Run Code Online (Sandbox Code Playgroud)

CouchDB将返回

HTTP 200 OK
Content-Type: text/plain
Content-Length: 26

I am the some_field value!
Run Code Online (Sandbox Code Playgroud)