【问题标题】:CouchDB View not returning documents when ?key specified指定 ?key 时,CouchDB View 不返回文档
【发布时间】:2017-03-13 02:39:16
【问题描述】:

我从 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 CouchDB 1.6.1 在 OSX 10.12.3 上本地运行测试

【问题讨论】:

    标签: node.js couchdb


    【解决方案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 参数来获取整个文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多