CouchDB中是否有可能从文档中检索单个值?例如,我有一个包含10000个键的文档,如下所示:
{
"_id": "8098091cc795acde43cd45335373cc92",
"_rev": "2-6d2e0ac43618388cc958b91e5015bba5",
"1":"some value",
"2":"another value",
...
"10000":"last value"
}
并且我不想每次解析整个文档,只是想获得密钥的值" 2"。这可能吗?
修改
当然,在提出这个问题之前,我仔细查看了文档并搜索了这个问题,但却没有找到这种可能性。但我想知道为什么这是不可能的?在我的理解中,视图和文档之间没有太大的区别,因为它们都是键值对的集合,但是可以使用查询字符串中的?key=...
从视图中获取单个值,而不可能这样做文件相同。为什么呢?
答案 0 :(得分:9)
您可以使用CouchDB show function处理服务器上的文档,并将任意数据发送到客户端。显示函数可以执行简单的操作,例如从文档中提取单个值;或者他们可以转换为完全不同的内容类型,例如XML。
例如:
db
_design/example
具有展示功能one_field
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是面向文档的数据库,因此它不支持对整个文档本身之外的数据进行更细粒度的访问。
它为您提供了精细的索引,但不是实际访问。