couchdb - 查询复杂键中的任何值(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"]
但无济于事 - 没有行..
解决方案
这对于单个索引是不可能的。您只能对密钥的第一部分进行子密钥搜索。为了满足您的需求,您将需要多个索引——根据您需要支持的查询的复杂程度,您可能需要大量索引。
为了支持按名字搜索,您的示例中的索引很好。
为了支持按姓氏搜索,您可能会反转索引 - 或仅索引姓氏。
如果您需要按中间名搜索,则需要第三个索引。如果要按名字和姓氏搜索(省略中间名),则需要另一个索引等。
推荐阅读
- python - Python Fission - 创建包和导入库
- ios - UITextView在更改字体后呈现奇怪的字符
- c++ - scons 找不到#include 文件
- dart - Dart 动态特性,dart:js 平台可用性
- r - 如何在 R 中写入空白值为 Null 的 CSV?
- ios - SwiftUI:将 LazyVStack 或 LazyHStack 放入 ScrollView 会导致卡顿(Apple 错误??)
- javascript - 使用 Javascript 在字符串第一次出现时拆分字符串
- javascript - TypeError: this.state.tickets.map 不是一个函数 (React)
- vb.net - 如何并行运行任务?
- azure - 应用程序网关的两个前端端口使用相同的端口 443 - terraform 中的 Azure 应用程序网关