CouchDB中的备用复合键范围

时间:2013-06-26 18:01:12

标签: nosql mapreduce couchdb

假设mapreduce函数表示对象关系,如:

function (doc) {
    emit([doc.source, doc.target, doc.name], null);
}

过滤复合键的常规示例如下:

startKey = [ a_source ]
endKey   = [ a_source, {} ]

这应该提供从 a_source

引用的所有对象的列表

现在我想要oposite,我不确定这是否可行。我无法找到 variant 部分首先出现的示例,例如:

startKey = [ *simbol_first_match* , a_destination ]
endKey   = [ {} , a_destination ]

这是可能的吗?复合键(1)是否过滤和(2)查询中的排序操作是否仅限于元素的顺序出现在键中?

我知道我可以定义另一个view / mapreduce,但我想尽可能避免额外的磁盘空间成本。

1 个答案:

答案 0 :(得分:1)

不,你不能这样做。请参阅here,其中我解释了密钥在使用CouchDB的视图请求中的工作方式。

复合键没什么特别,没有过滤或任何东西。在内部,您必须想象 不再有数组。这对我们的开发人员来说只是语法糖。因此[a,b] - [a,c]被视为'a_b' - 'a_c'_是特殊分隔符)。