如何实施";“部分匹配”;在couchdb查询中

如何实施";“部分匹配”;在couchdb查询中,couchdb,Couchdb,我有一个Couchdb存储文档,每个文档都有一个前缀字段。前缀是唯一的,因此它们实际上可以用作ID 说: 我需要使用更长但与前缀完全匹配的键来查询这些文档,以检索适当的文档(前缀上始终有一个完全匹配)。前缀长度变化,键长度不变 query_key = AAABBBCCC123 => _id1 query_key = AAABBBDDD456 => _id2 query_key = AAABBEEEEEEE => _id3 query_key = AAABxxxxxxxx => Null 你知

我有一个Couchdb存储文档,每个文档都有一个前缀字段。前缀是唯一的,因此它们实际上可以用作ID

说:

我需要使用更长但与前缀完全匹配的键来查询这些文档,以检索适当的文档(前缀上始终有一个完全匹配)。前缀长度变化,键长度不变


query_key = AAABBBCCC123 => _id1
query_key = AAABBBDDD456 => _id2
query_key = AAABBEEEEEEE => _id3
query_key = AAABxxxxxxxx => Null
你知道在沙发上怎么做吗?

地图功能应该是这样的

功能(doc){
发出(doc.prefix,doc);
}
您应该使用键中的substring函数搜索文档

像这样:

_design/doc/_view/viewname?key=QUERY_KEY.substring(0, FIXED_KEY_LENGTH)

创建一个包含
doc.prefix
的视图。然后使用
startkey
将查询降序设置为
limit=1
的查询键。结果前缀可能是您的,但您必须确认


您可以在客户端中确认前缀,也可以使用
\u list
功能确认前缀。一个<代码>列表> <代码>函数可能对性能没有帮助,所以我会考虑在客户端中执行它,<强>除非你有很多语言的客户机,并且你可以在一个URL上标准化以用相同的输出来查询。< / P>不确定子串,无论如何我永远不会知道FixEdEKEY长度。我通过…/\u view/QUERY\u NAME?startkey=“QUERY\u key”&descending=true&limit=1获得了匹配的最后一个前缀,我只需要验证前缀是否实际包含在QUERY\u密钥中(目前为客户端)。如果同时存在
AAABBBCCC
aaabbbcc12
并且您查询
aaabbbcc123
,该怎么办。哪一个是正确的答案?还是说这种情况不可能?哦,哇,我刚刚看到你用同样的技巧发表的评论。对不起,我会告诉你重点的-我不知道这个名单,谢谢!
_design/doc/_view/viewname?key=QUERY_KEY.substring(0, FIXED_KEY_LENGTH)