当指定?键时,CouchDB View不返回文档

时间:2017-03-10 21:33:16

标签: node.js couchdb

我是从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

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参数即可获取整个文档。