我是从SQL背景来到CouchDB的,我正在尝试做常见的" SELECT FROM DB where field = someValue"。我创建了以下设计文档:
{
"_id": "_design/views",
"views": {
"byRubric": {
"map": "function(doc) {if(doc.idRubric){emit(doc._id, doc.idRubric);} }"
}
}
}
如果我使用以下URL查询CouchDB表,它会正确返回表中的所有15个文档:
http://localhost:5984/rubric_content/_design/views/_view/byRubric
但是,如果我尝试在这个视图中获取那些在idRubric字段中具有特定值的文档,例如,我知道它存在于执行以下url,那么我将获得0个文档。事实上,15个文档中的12个在idRubric字段中具有此特定值。 http://localhost:5984/rubric_content/_design/views/_view/byRubric?key="9bf94452c27908f241ab559d2a0d46c5"
(不,如果"标记被%22替换,它没有任何区别)。如果我关闭引号,则URL会失败。
我错过了什么?使用couchdb在Apache OST 10.12.3上本地运行此测试 - Apache CouchDB 1.6.1
答案 0 :(得分:1)
您的视图是以ID为密钥的文档发出文档。
相反,您希望将rubricID作为键发出。
{
"_id": "_design/views",
"views": {
"byRubric": {
"map": "function(doc) {if(doc.idRubric){emit(doc.idRubric);} }"
}
}
}
然后,查询将如下:
http://localhost:5984/rubric_content/_design/views/_view/byRubric?key="rubric3"
当您使用地图时,您需要认为它就像是一个字典。你有一把钥匙和一个价值。您将搜索匹配的密钥并获取值。
如果您没有发出任何值,您只需使用?include_docs = true参数即可获取整个文档。