我有一个存储文档的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中完成?
答案 0 :(得分:2)
制作一张发出doc.prefix
的视图。然后使用startkey
将limit=1
设置为您的查询密钥,查询降序。结果前缀可能可能属于您,但您必须确认。
您可以在客户端或使用_list
功能确认前缀。 _list
函数可能对性能没有帮助,所以我会考虑在客户端中执行此操作,除非您有许多语言的许多客户端,并且您可以标准化单个URL以进行查询相同的输出。
答案 1 :(得分:0)
地图功能应如下所示
function(doc) {
emit(doc.prefix, doc);
}
你应该在密钥中搜索带有子字符串函数的文档。
像这样:
_design/doc/_view/viewname?key=QUERY_KEY.substring(0, FIXED_KEY_LENGTH)