javascript - 显式设置 CouchDB 文档键

标签 javascript curl couchdb key querying

CouchDB 文档似乎附有一个 key ;检索单个文档时它不会显示,但您可以使用它们来检索文档范围,例如:

 wget "http://localhost:5984/monitor20n/_all_docs?startkey=1111&endkey=2222

但是,显然该 key 始终与文档 ID 相同,因此您获得的只是这样的内容

{"total_rows":14269,"offset":0,"rows":[
{"id":"128127896626798592","key":"128127896626798592","value":{"rev":"1-4e07e2c4b4eddfad5846ddf905337197"}},
{"id":"128128575021907970","key":"128128575021907970","value":{"rev":"1-43d983af1e837a4415b6167cae3b5de8"}},
... and so on }}

(参见此处 key == id )。但是,您可以在 View 中使用更复杂的键,包括允许更复杂交互的向量;至少,您可以设置 View 的键,这样您现在就可以提前搜索内容,而无需查找文档 ID。 现在的问题是:您可以在创建文档时设置这些键吗?或者也许在创建之后? 一个明显的解决方法是创建一个像这样的 View

function (doc) {
    emit(doc.key,doc)
}

但是,我想知道是否有更直接的方法来获得相同的效果。

最佳答案

键是 CouchDB View 的重要组成部分。对于 View ,键不必是文档 ID。但生成键的唯一方法是在 View 中使用 emit 函数。您可以设置的任何属性都不会自动成为键。

将 _all_docs 视为内置 View 。为了保持一致,它遵循与常规 View 相同的输出,并使用 id 作为键。但您无法更改 _all_docs View 。如果您想在保存文档时提供自己的_id,那么这将成为关键。 因此,如果您想在“_all_docs” View 中自定义“键”,您可以创建如下文档:

{ _id: 'Sample1' }, {_id: 'My2'}。保存它们后,当您请求“_all_docs” View 时,您将得到: {“总行数”:2,“偏移量”:0,“行数”:[ {“id”:“样本1”,“键”:“样本1”,“值”:{“rev”:“1-4e07e2c4b4eddfad5846ddf905337197”}}, {"id":"My2","key":"My2","value":{"rev":"1-43d983af1e837a4415b6167cae3b5de8"}}, ...等等}}

以下是有关文档 ID 的构成的链接:

http://wiki.apache.org/couchdb/HTTP_Document_API#Special_Fields

虽然没有明确说明,但您不能使用对象或数组作为 DocumentID。

希望有帮助。

关于javascript - 显式设置 CouchDB 文档键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904921/

相关文章:

javascript - 在 Google map Api Javascript 中创建自己的标记

php - PHP ssh2_tunnel:使用代理/ socks 抛出ssh服务器?

security - couchdb远程复制问题: ubuntu (local) CentOS ( remote )

php - 从 php curl 比通过 putty curl 需要更多时间

java - 用java写一个postcurl

compiler-errors - 在Debian 8.6上安装CouchDB 2.0.0失败

php - 我应该选择哪个 PHP 库来使用 CouchDB?

javascript - 选择一个随机的 div 并应用带有超时的 css 类并循环它?

javascript - 将 css 附加到 javascript 变量

javascript - jQuery 和 JavaScript 混合太多?