从文档中获取单个值

时间:2011-09-13 21:53:42

标签: couchdb

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

{
   "_id": "8098091cc795acde43cd45335373cc92",
   "_rev": "2-6d2e0ac43618388cc958b91e5015bba5",
   "1":"some value",
   "2":"another value",
   ...
   "10000":"last value"
}

并且我不想每次解析整个文档,只是想获得密钥的值" 2"。这可能吗?

修改

当然,在提出这个问题之前,我仔细查看了文档并搜索了这个问题,但却没有找到这种可能性。但我想知道为什么这是不可能的?在我的理解中,视图和文档之间没有太大的区别,因为它们都是键值对的集合,但是可以使用查询字符串中的?key=...从视图中获取单个值,而不可能这样做文件相同。为什么呢?

2 个答案:

答案 0 :(得分:9)

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

例如:

  • 在数据库db
  • 其设计文档_design/example具有展示功能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

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
         };
}

设计文档如下所示:

{ "_id": "_design/example"
, "shows":
  { "one_field": ... } // Paste the above function as a string.
}

CouchDB将返回

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

I am the some_field value!

答案 1 :(得分:1)

没有。 CouchDB是面向文档的数据库,因此它不支持对整个文档本身之外的数据进行更细粒度的访问。

它为您提供了精细的索引,但不是实际访问。