couchDB 中的链式映射/归约

2024-02-04

在 couchDB 中,我有一组如下所示的项目(为了示例而简化):

{_id: 1, date: "Jul 1", user: "user1"}
{_id: 2, date: "Jul 2", user: "user1"}
{_id: 3, date: "Jul 3", user: "user2"}
...etc...

我想获得“最近活动”的列表,按日期排序,没有重复的用户 _ids。我可以创建一个具有如下结果的视图:

{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 https://github.com/cloudant/bigcouch支持链式映射/归约,但似乎相当过时/不受支持(最后一个版本 2012 年)。

这似乎是一个相当常见的问题 - 有哪些现有的解决方案(除了“切换数据库”之外)?


以下是如何使用 couchdb 1.xxx 进行链式映射缩减的总体思路。我们想要的是能够将一个映射/归约的结果传递到另一个映射/归约的结果。

  1. 订阅由视图过滤的 _changes 提要。这将为您提供地图函数实际发出的文档列表。

  2. 接下来我们需要为这些过滤后的文档调用视图函数。这很简单,因为我们可以将键列表传递给视图,因此我们只需传递键并获得视图的所需结果子集。

  3. 接下来,我们将此结果推送到单独的数据库或同一数据库中。我们可以使用批量插入来更快地执行插入。如果您使用单独的数据库,您甚至可以重用_id's从查看结果来看,批量更新会容易得多。

  4. 在这个数据库中,我们定义了另一个视图,根据值对结果进行排序。

    {key: "user1",mostRecentDate: "7 月 2 日"} {key: "user2",mostRecentDate: "7 月 3 日"}

既然您已经完成了这一步,您所需要做的就是创建一个视图mostRecentDate在第二个数据库中,您将获得按日期排序的用户活动。

我希望你使用的是虚拟reduce。返回 null 且仅用于group=true.

在步骤 4 中使用列表函数可以让您的生活更轻松。由于批量更新需要文档列表采用以下形式{"docs":[....]}您可以使用列表功能轻松地一次性获取它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

couchDB 中的链式映射/归约 的相关文章

  • 通过 ajax 调用 CouchDB 时得到空响应

    我是 CouchDB 的新手 所以请耐心等待 我有一个在虚拟机上运行的 CouchDB 实例 我可以通过浏览器通过蒲团或直接访问它 http 192 168 62 128 5984 articles hot dog 在浏览器中调用该 URL
  • couchDB、python 和身份验证

    我已经安装了 couchDB v 0 10 0 并尝试通过从 couchDB wiki 下载的 Couch 类中的 python 与它对话 问题是 Create database mydb error unauthorized reason
  • 哪一个 NoSQL 数据库(如果有)可以为查询结果集提供*更改*流?

    哪个 NoSQL 数据库 如果有的话 可以提供changes到查询结果集 有人能给我举一些例子吗 首先 我相信没有一个 SQL 数据库提供此功能 我是对的吗 我需要能够指定任意 简单的查询 其在 SQL 中的等价形式可以写成 SELECT
  • 为什么应该使用基于文档的数据库而不是关系数据库?

    为什么我应该使用基于文档的数据库 如 CouchDB 而不是使用关系数据库 是否存在基于文档的数据库比关系数据库更适合的典型应用程序或领域 也许你不应该 第二个最明显的答案是 如果您的数据不相关 则应该使用它 这通常表现为没有简单的方法将数
  • CouchDB 与 RDBMS 相比有何优势

    我听说过很多关于couchdb http couchdb apache org 最近 我对它提供的功能感到困惑 很难以严格的优势 劣势形式解释所有差异 我建议你自己尝试一下 CouchDB 您首先会注意到的是 初始使用期间的学习曲线与 RD
  • 如何在 Google AppEngine 平台上访问 Fauxton?

    我正在 Google App Engine 上创建一个离线优先的应用程序 其中 PouchDB 作为我的本地数据库 CouchDB 作为我的远程数据库 我已在 Google AppEngine 上启用了 CouchDB 并尝试访问以下 UR
  • CouchDB 附件的自定义属性

    我试图在单个 CouchDB 文档中存储多个独立附件 并为每个附件分配任意属性 即描述 有这样做的约定吗 据我所知 我无法将它们插入 attachments直接构造 提前致谢 您无法修改其中的任何内容 attachments直接使用 因为它
  • CouchDb 视图 - 列表中的键

    我想查询 CouchDB 并且我有一个特定的需求 我的查询应该返回与此条件相对应的文档的名称字段 id 等于或包含在文档归档 列表 中 例如 字段输出如下 output doc s100 doc s101 doc s102 doc s103
  • 有人可以解释一下 Ektorp 中的 Cascading 和 FetchType 惰性吗?

    我是 CouchDB 和 Ektorp 的新手 实际上我今天就开始尝试使用它 我找到的帮助我入门的最详细的文档是这个 http www ektorp org reference documentation html d100e394 htt
  • CouchDB 入门

    我已经在我的 Linux 云服务器上安装了 CouchDB 并且我正在尝试访问 Futon 欢迎屏幕 O Reilly 书中说要转到 127 0 0 1 portnum 但我不在本地主机上工作 它是我的远程服务器 所以我应该能够使用 xxx
  • 检索刚刚删除的文档

    我删除了一个文档 但我仍然可以在其中看到它 changes 这样我就可以看到最后一个有效的 rev 已删除 因此获取带有 id 和最后修订版本的文档只会返回 id 25efa4ec8489d8b89b34c5cad6000059 rev 3
  • 从节目/列表中抛出 404

    我像这样查询视图 db design myviewname view foo key 22ABC123 22 结果如下 total rows 3 offset 3 rows 都好 由于没有找到文档 我想从节目或列表中抛出 404 那可能吗
  • CouchDB“加入”两个文档

    我有两个看起来有点像这样的文档 Doc id AAA creator id data DataKey id credits left 500 times used 0 data id AAA 我想要做的是创建一个视图 它允许我传递 Data
  • 我可以在 iOS 上使用 MongoDB 来替代 CoreData 吗?

    我刚刚开始阅读 MongoDB 和 CouchDB 等 NoSQL 技术 我有兴趣知道是否可以使用 MongoDB 或任何 NoSQL 技术来替代 Core Data 应用程序 核心数据应用程序可能需要很长时间来学习和实现 特别是如果您的应
  • couchdb:设计文档中的地图给出了compilation_error

    我在 Debian 测试中使用 Couchdb 1 1 1 我在数据库中有这个设计文档 id design Page rev 9 1944cdebabf20ae569eab7b534b43e67 views all map function
  • 本地实例不支持 couchdb POST 方法

    我的本地 couchdb 实例似乎不支持 POST 方法 这是我从 chrome 开发工具得到的答案 POST http localhost 5984 epos couch design epos couch view ri 415 Uns
  • PouchDB 身份验证:创建新的 CouchDB 用户

    我使用 PouchDB 身份验证插件 我喜欢它 然而 我对注册过程有点困惑 也许我没有以正确的方式使用它 我用它在我的 CouchDB 数据库中创建新用户 但我不明白为什么它与特定数据库关联 由于我在 CouchDB 用户的特定数据库之前创
  • couchdb读取身份验证

    我如何处理 couchdb 中的读取身份验证 我知道角色可以在单独的数据库中定义 但我想在文档级别实现读取身份验证 我正在考虑使用node js 但它似乎不是一个优雅的解决方案 因为couchdb也有一个http服务器 我不想再添加一个 或
  • CouchDB 视图中的链接文档

    我很难理解 CouchDB链接文档 http wiki apache org couchdb Introduction to CouchDB views Linked documents特征 我有两个types存储在单个 CouchDB 数
  • 用户如何登录定义了读者角色的 couchapp?

    我通过 Couchapp 部署了我的应用程序 这意味着整个应用程序是从数据库中提供服务的 我不希望 Couchdb 数据库中的数据公开可用 因此我指定了用户在向他提供数据之前必须具有的读者角色 然而 当我去申请时 我所能得到的是 error

随机推荐