如何在couchdb查询中实现“部分匹配”

时间:2011-01-26 10:43:35

标签: couchdb

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

说:


_id=1 {prefix="AAABBBCCC", ...}
_id=2 {prefix="AAABBBDDD", ...}
_id=3 {prefix="AAABBE", ...}
_id=4 {prefix="AAAFF", ...}

我需要查询这些文档,使用更长但完全匹配前缀的密钥检索适当的文档(始终在前缀上完全匹配)。前缀长度各不相同,密钥长度不变。


query_key = AAABBBCCC123 => _id1
query_key = AAABBBDDD456 => _id2
query_key = AAABBEEEEEEE => _id3
query_key = AAABxxxxxxxx => Null

任何想法如何在Couch中完成?

2 个答案:

答案 0 :(得分:2)

制作一张发出doc.prefix的视图。然后使用startkeylimit=1设置为您的查询密钥,查询降序。结果前缀可能可能属于您,但您必须确认。

您可以在客户端或使用_list功能确认前缀。 _list函数可能对性能没有帮助,所以我会考虑在客户端中执行此操作,除非您有许多语言的许多客户端,并且您可以标准化单个URL以进行查询相同的输出。

答案 1 :(得分:0)

地图功能应如下所示

function(doc) {
  emit(doc.prefix, doc);
}

你应该在密钥中搜索带有子字符串函数的文档。

像这样:

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