首页 > 解决方案 > 使用 doc._id 和另一个参数查找单个文档

问题描述

我没有找到答案,所以我试了一下:

我有一个数据库,其中存储了具有各种属性的文档,包括uuid代表当前正在使用该应用程序的用户。我需要按其字段获取单个文档,_id但我只希望在该uuid字段与当前用户匹配时返回它。我只知道当前用户uuid在运行时的状态,所以请求需要是动态的。

我试图用几种不同类型的视图和查询来解决这个问题。最新的尝试如下。

查看设计文档内部:

    "current_user_passed_id": {
        "map": "function(doc){ if(doc.type && doc.type == 'my_doc' && doc._id && doc.uuid) emit([doc._id, doc.uuid], doc)}"
    }

询问:

/db/design/_design_name/_view/current_user_passed_id?key=["6e08fe0e990f73593300df411f023ec4", "9698fde5-99b9-4693-8f78-b2ae8a7f03e0"]

在上面的查询中,6e08fe0e990f73593300df411f023ec4doc._id并且9698fde5-99b9-4693-8f78-b2ae8a7f03e0doc.uuid

标签: node.jsexpresscouchdb

解决方案


Couch DB 映射函数始终具有_id属性,因此在函数的条件下不需要检查。我还需要在查询中使用startkeyendkey查询参数而不是key参数。和startkey两者endkey都采用相同的数组,因为我只在一个文档之后。

以下是我修改后的工作代码:

查看设计文档内部:

    "current_user_passed_id": {
        "map": "function(doc){ if(doc.type && doc.type == 'key_doc' && doc.uuid) emit([doc._id, doc.uuid], doc)}"
    }

询问:

/db/_design/keys/_view/current_user_passed_id?startkey=["6e08fe0e990f73593300df411f023ec4", "9698fde5-99b9-4693-8f78-b2ae8a7f03e0"]&endkey=["6e08fe0e990f73593300df411f023ec4", "9698fde5-99b9-4693-8f78-b2ae8a7f03e0"]

推荐阅读