CouchDB视图结构

CouchDB视图结构,couchdb,Couchdb,假设我有一个用户集合。它们有“主题”,每个主题都有优先级——这决定了用户在这个主题中的优先级。我有过一些类似的情况,但现在让它成为用户、主题和优先事项 我想显示已选择主题的用户,并按此主题的优先级对其进行排序。用户和主题处于“多对多”状态,这是示例用户结构: { name:"Nic", subjects: [ { name:"math", priority:10}, { name:"english", priority: 11} ...]} 我应该如何组织视图结构 第一个变

假设我有一个用户集合。它们有“主题”,每个主题都有优先级——这决定了用户在这个主题中的优先级。我有过一些类似的情况,但现在让它成为用户、主题和优先事项

我想显示已选择主题的用户,并按此主题的优先级对其进行排序。用户和主题处于“多对多”状态,这是示例用户结构:

{ name:"Nic", 
  subjects: [
   { name:"math", priority:10}, 
   { name:"english", priority: 11} ...]}
我应该如何组织视图结构

第一个变体是按主题创建视图
,按主题键减少用户,并获得“math”用户列表,如
\u view/by subjects?key=“math”&reduce=true
。但在这个例子中,我必须在客户端应用程序中按优先级排序

第二种方法是为每个主题创建单独的视图,并将
优先级
作为键发出。因此,我可以从
\u view/math?descending=true中获取数据,并对其进行排序。但据我所知,每当新用户插入数据库时,所有42个视图都会更新(如果我有42个主题)。在第一种情况下,我只有一个视图需要更新

所以,问题是:哪种变体更适合CouchDB,还是更惯用

如果你发射

[“:主题”、“:用户”、“:优先级”]

作为key和request
?key=“math”
您将获得按字母顺序排序的用户及其优先级列表

如果你发射

[“:主题”、“:优先级”、“:用户”]


您将获得按
优先级排序的相同列表。你也可以通过addin
?limit=10

询问前十名事实上,我又有点卡住了。。如果我发出
[“math”,8]
这样的键,我必须准确地请求整个键,像
?key=[“math”,8]
。否则,我的回答中没有行你不应该-多少次我需要友好的帮助才能退一步,看看简单的解决方案,我有几个复杂的答案:-)我建议在键中使用字符串,并使用
startkey
endkey
请求。如果使用第一个\u0000和最后一个\u9999 unicode字符作为“占位符”,则应该可以请求不带确切密钥的字符。是的,谢谢。几分钟前刚读到startkey,看起来像是我需要的