试图让这个问题尽可能简单......我正在考虑使用两个(Couch)数据库视图。
第一个签名看起来有点像这样;
{[username, group], value}
我可以查询 - startkey = [用户名]& endkey [用户名,{}]
...
两个视图中的第二个看起来像;
{[group, username], value}
我可以同样查询 - startkey = [group]& endkey [group,{}]
Afaik,我无法使用 - startkey = [{},propertyName]& endkey [{},propertyName] 查询视图 - 这就是为什么我觉得我需要两个视图。但问题是,使用看起来如此相似的键创建两个视图的感觉有多么麻烦。当然,最大的优点是两个视图中的一个将为我提供一个简单,直观的用户名搜索,另一个将对组进行相同的操作。
但是,这两个组都允许我使用reduce函数来识别每个组中的唯一用户名。
TLDR?
我是否可以只使用一个视图来唯一标识每个组中的用户数,或者使用键“组”或“用户名”属性来查询它?
答案 0 :(得分:0)
不,你不能因为视图底层的B树按照包含从第一个到最后一个的索引的键进行排序,因此不允许通过二级,三级等键进行搜索,除非键在它面前也存在。这与在RDBMS中添加索引类似,因为相同的B树结构是其中的基础。在RDBMS中,查询要使用的索引必须至少包含索引的第一个键。在没有第一个键的情况下执行查询将导致表扫描(假设没有更好的索引存在),而以这种方式“查询”CouchDb视图只会导致无结果。所以CouchDb的视图是显式索引,没有对所有文档进行扫描的后退。
根据我在使用CouchDb时的体验,感觉有一种内在的倾向可以扩散视图,但实际上它只是迫使我们真正考虑搜索,因为没有内置的后备。