首页 > 解决方案 > 查询复杂键中的任何值(AKA 通配符)

问题描述

我浏览了文档和 SO 问题,但没有为我的特定案例找到任何明确的答案。

拥有这个复杂的(发射数组)键映射函数

function(doc) {
    if (doc.userFirstName && doc.userLastName && doc.userGender && doc.homeCountry && doc.homeCity) {
      emit([
        doc.userFirstName,
        doc.userMiddleName,
        doc.userLastName,            
      ], null)
    }

我想用其中一些为空的值来查询它-因此查询可以接受键中的任何值,即

userFirstName = *anyvalue*
userMiddleName = *anyvalue*
userLastName = "Mozart"

如果可能的话 - 我的 startKey= 和 endKey= 请求参数应该是什么样的?我试过

startkey=[{},{},"Mozart"]&endkey=[{},{},"Mozart"]

但无济于事 - 没有行..

标签: couchdb

解决方案


这对于单个索引是不可能的。您只能对密钥的第一部分进行子密钥搜索。为了满足您的需求,您将需要多个索引——根据您需要支持的查询的复杂程度,您可能需要大量索引。

为了支持按名字搜索,您的示例中的索引很好。

为了支持按姓氏搜索,您可能会反转索引 - 或索引姓氏。

如果您需要按中间名搜索,则需要第三个索引。如果要按名字和姓氏搜索(省略中间名),则需要另一个索引等。


推荐阅读