查询复杂键中的ANY值(又称通配符) [英] Query for ANY value in complex key (AKA wildcard)

查看:37
本文介绍了查询复杂键中的ANY值(又称通配符)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我经历了文档和SO问题,但没有找到针对我的特殊情况的明确答案.

I went through docs and SO questions but didn't find any clear answer for my particular case.

具有这种复杂的(发射数组)键映射功能

Having this complex (emitting array) key map func in view

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

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

I want to query it with values some of which are empty - so query could accept ANY values from the key, i.e.

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

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

If it's possible - what should my startKey= and endKey= request parameters look like? I tried

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

但无济于事-没有行..

but with no avail - got no rows..

推荐答案

在沙发数据库查询中,"Any_value"通配符是不可能的(但是,对开发人员的问题-为什么不呢?),因此执行多维度查找的唯一方法空(= accept_any)值用于维护非空搜索值的所有可能组合的索引.我最终得到了这个_design文档:

"Any_value" wildcard in couchdb query isn't possible (yet, question to devs - why not?), so the only way to perform multy-dimensional lookup with empty (=accept_any) values is to maintain indexes for all possible combinations of non-empty search values. I ended up with this _design doc:

let ddoc = {
      '_id': '_design/search',
      'views': {
        'firstOnly': {'map': firstOnly},
        'middleOnly': {'map': middleOnly},
        'lastOnly': {'map': lastOnly},
        'firstLast': {'map': firstLast},
        'firstMiddle': {'map': firstMiddle},
        'middleLast': {'map': middleLast}
      }
    };

其中(即已知的MiddleName和lastName)映射函数如下所示:

where (i.e. for known middleName and lastName) map function looks like:

const middleLast =
  `function(doc) {
    if (doc.userMiddleName && doc.userLastName) {
      emit([
        doc.userMiddleName,
        doc.userLastName,
      ], null)
    }
  }`;

然后我可以根据已知的数据集查询相应的视图.

Then can I query corresponding view depending on dataset known.

因此,六个复杂的键索引而不是一个.非常繁重(如果有上百万条记录,则很遗憾),但这是唯一可能的解决方案.

So six complex key indexes instead of one. Quite heavy (in case of millions of records), but, unfortunately, the only possible solution.

感谢所有响应者,您的帮助无价.

Thanks to all responders, your help is unvaluable.

这篇关于查询复杂键中的ANY值(又称通配符)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆