0

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

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

但是,显然该密钥始终与文档 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 )。但是,您可以在视图中使用更复杂的键,包括允许更复杂交互的向量;至少,您可以设置视图的键,这样您现在就可以提前搜索什么而无需查找文档 ID。现在的问题是:您可以在创建文档时设置这些键吗?或者也许在创建它之后?一个明显的解决方法是创建这样的视图

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

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

4

1 回答 1

4

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

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

{_id:'Sample1'},{_id:'My2'}。保存它们后,当您请求“_all_docs”视图时,您会得到: {"total_rows":2,"offset":0,"rows":[ {"id":"Sample1","key":" Sample1","value":{"rev":"1-4e07e2c4b4eddfad5846ddf905337197"}}, {"id":"My2","key":"My2","value":{"rev":"1-43d983af1e837a4415b6167cae3b5de8 “}}, ... 等等 }}

这是一个关于什么是 documentID 的链接:

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

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

希望有帮助。

于 2011-10-26T15:37:28.567 回答