【发布时间】:2014-08-13 03:09:46
【问题描述】:
在 couchDB 中,我有一组类似以下的项目(例如,为了简化):
{_id: 1, date: "Jul 1", user: "user1"}
{_id: 2, date: "Jul 2", user: "user1"}
{_id: 3, date: "Jul 3", user: "user2"}
...etc...
我想要一个“最近的活动”列表,按日期排序,没有重复的用户 _id。我可以创建一个具有如下结果的视图:
{key: "July 3", _id: 3, user: "user2"}
{key: "July 2", _id: 2, user: "user1"}
{key: "July 1", _id: 1, user: "user1"}
但这包含同一用户的重复条目。或者我可以创建一个映射 {key: user, value: date} 的视图并减少到
{key: "user1", mostRecentDate: "July 2"}
{key: "user2", mostRecentDate: "July 3"}
但这不是按“最近”排序的。
我知道不支持明显的解决方案 - 减少另一个视图的结果。 BigCouch 支持链式 map/reduce,但似乎已经过时/不受支持(2012 年最新版本)。
这似乎是一个相当普遍的问题 - 有哪些现有的解决方案(除了“切换数据库”)?
【问题讨论】:
-
rcouch 具有基于视图的 _changes,可让您进行链式映射减少。 rcouch 的大部分好东西都合并到了 couchdb 2.0 中,所以如果你可以稍等一下,默认情况下你可以在 couchdb 中进行链式 map reduce。如果您使用 cloudant,它原生支持 chanined map reduce
-
映射[日期,用户]的视图怎么样?如果您的日期是可排序的(如 ISO 8601)并且您使用 descending=true 进行查询,则应按最近的日期排序。
-
与第一个示例一样,每个用户仍将包含重复条目。将它移动到键而不是值不会获得任何收益。
-
嗨@AkshatJiwanSharma 我一直在尝试查找有关 couchdb 2.0 中 rcouch 功能的更多信息。我在这里问,因为我想其他人会走这条路。你知道这个功能是否已经进入了 couchdb2.0-dev 版本吗? developer.ibm.com/clouddataservices/2016/03/18/…
-
查看Issue Tracker 我只能找到一个没有任何活动的旧问题。感谢您的链接,我还找到了this doc about Barrel(显然是 rcouch 的继任者),但也许某处有更好的文档?
标签: couchdb