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
请求前十名
假设我收集了一些用户。他们有 "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