索引couchdb视图时,可以发出一个数组作为键,例如: 发射([“一”,“二”,“三”],doc); 我很欣赏这样一个事实:在搜索视图时,顺序很重要,但有时我希望视图忽略它。我想到了几个选择。 按照惯例,只按字母顺序发出内容,并确保查找使用相同的约定。 2.以某种方式散列,忽略顺序,并根据该散列发出/搜索。 (这很简单,如果你只是单独散列每一个,“求和”哈希,然后修改。) 注意:我确信这可能会在权威指南的某处介绍,但我找不到它。
答案 0 :(得分:1)
看起来正确的方法是确定密钥的传统排序,以此顺序发出它们,并确保查询强制执行此排序。否则我们需要发出密钥的所有n(阶乘)排列(如果n大于3,则可能会变坏)
答案 1 :(得分:0)
CouchDB将始终按顺序维护数组键。您是否考虑过将所有序列变化作为视图的一部分?有点像:
function(doc) {
function computeAllKeyVariations(fromKey) {
// returns array of key arrays
}
var allKeys = computeAllKeyVariations(startingKey);
for (k in allKeys) {
emit(k, doc); // or emit(k, null)
}
}
附注:您还可以选择使用emit(['one','two','three'], null)
而不是发出文档。这将避免让CouchDB将完整文档存储在视图索引中(不止一次)。要获得与之前相同的结果,只需使用&include_docs=true