CouchDB 视图结构

CouchDB view structure

假设我收集了一些用户。他们有 "subjects" 并且每个主题都有优先级——这决定了用户在这个主题中的优先级。我有过几次这样的情况,但现在让它成为用户、主题和优先级。

我想显示选择主题的用户,并按主题的优先级排序。用户和 subjetcs 在 "many to many" 领域,这是示例用户结构:

{ name:"Nic", 
  subjects: [
   { name:"math", priority:10}, 
   { name:"english", priority: 11} ...]}

我应该如何组织视图结构?

第一个变体是创建视图 by-subject,按主题键减少用户并获得像 _view/by-subjects?key="math"&reduce=true 这样的 "math" 用户的列表。但是这种情况我必须在客户端应用程序中按优先级排序...

其次是为每个主题创建单独的视图并发出 priority 作为键。所以我可以从 _view/math?descending=true 中获取数据并将其排序。但据我所知,每次当新用户插入数据库时​​,所有 42 个视图都会更新(如果我有 42 个主题)。在第一种情况下,我只有一个视图要更新。

所以,问题是:对于 CouchDB 来说,哪个变体更可取,或者更惯用?

如果你发射

[":subject",":user",":priority"]

作为键和请求 ?key="math" 您将获得按字母顺序排序的用户及其优先级列表。

如果你发射

[":subject",":priority",":user"]

您得到按 priority 排序的相同列表。您也可以通过 addin ?limit=10

请求前十名