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)
}
然而,我想知道是否有更直接的方法来获得相同的效果。
答案 0 :(得分:4)
键是CouchDB视图的重要组成部分。有了视图,密钥不必是文档ID。但是生成密钥的唯一方法是在视图中使用emit函数。没有可以设置的属性会自动成为密钥。
将_all_docs视为内置视图。为了保持一致,它遵循与常规视图相同的输出,并使用id作为键。但是您无法更改_all_docs视图。如果您想在保存文档时提供自己的_id,那么最终将成为关键。 因此,如果您想在“_all_docs”视图中自定义“键”,则可以创建如下文档:
{_id:'Sample1'},{_ id:'My2'}。保存后,当您请求“_all_docs”视图时,您将获得: { “TOTAL_ROWS”:2 “偏移量”:0, “行”:[ { “ID”: “样本”, “关键”: “样本”, “价值”:{ “转”: “1-4e07e2c4b4eddfad5846ddf905337197”}, { “ID”: “My2一致”, “关键”: “My2一致”, “价值”:{ “转”: “1-43d983af1e837a4415b6167cae3b5de8”}, ......等等}}
以下是有关documentID的内容的链接:
http://wiki.apache.org/couchdb/HTTP_Document_API#Special_Fields
虽然没有明确说明,但您不能将对象或数组用作DocumentID。
希望有所帮助。