couchDB中的链式映射/约简
在couchDB中,我有一组类似于以下内容的项(为了便于示例简化): 我想得到一个“最近的活动”列表,按日期排序,没有重复的用户ID。我可以创建一个具有如下结果的视图:couchDB中的链式映射/约简,couchdb,Couchdb,在couchDB中,我有一组类似于以下内容的项(为了便于示例简化): 我想得到一个“最近的活动”列表,按日期排序,没有重复的用户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: "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"}
但这并不是按“最近”排序的
我知道明显的解决方案是不支持减少另一个视图的结果。支持链式映射/缩减,但似乎已经过时/不受支持(最新版本2012)
这似乎是一个相当常见的问题-除了“切换数据库”之外,还有哪些现有的解决方案?以下是如何使用couchdb 1.xxx进行链式地图缩减的一般思路。我们想要的是能够将一个map/reduce的结果传递给另一个map/reduce的结果
\u id的
,这样批量更新就会容易得多mostRecentDate
上创建一个视图,就可以获得按日期排序的用户活动
不过,我希望您使用的是虚拟reduce。返回null且仅用于group=true
在步骤4中使用列表功能可以使您的生活更轻松。由于批量更新要求文档列表的格式为
{“docs”:[..]}
您可以使用列表功能轻松地一次获得它。有一个基于视图的更改,允许您进行链式地图缩减。rcouch的大部分好东西都合并到了couchdb 2.0中,所以如果您可以稍等一下,您可以在默认情况下在couchdb中进行链式映射缩减。如果您使用cloudant,它支持chanined map reduce Natively映射[日期,用户]的视图是什么?如果您的日期是可排序的(如ISO 8601),并且您使用descending=true进行查询,则应按最近的日期进行排序。与第一个示例一样,每个用户仍将包含重复的条目。将其移动到键而不是值不会得到任何好处。嗨@AkshatJiwanSharma我一直在尝试查找有关couchdb 2.0中rcouch功能的更多信息。我在这里发问,因为我认为其他人会走这条路。您知道这个特性是否已经进入couchdb2.0-dev版本了吗?看一下,我只能找到一个没有任何活动的旧问题。感谢你的链接,我也找到了(显然是rcouch的继任者),但也许有更好的文档?这是2014年8月。有人知道我们在2015年11月是否离在CouchDB的开源版本中使用Chained Map Reduce更近了吗?来自未来的问候!2019年的情况如何?
{key: "user1", mostRecentDate: "July 2"}
{key: "user2", mostRecentDate: "July 3"}