您可以将 CouchDB 的“文档更新处理程序”与复制一起使用吗?

Posted

技术标签:

【中文标题】您可以将 CouchDB 的“文档更新处理程序”与复制一起使用吗?【英文标题】:Can you use CouchDB 'document update handlers' with replication? 【发布时间】:2016-02-22 15:56:12 【问题描述】:

我正在将文档从 DB A 复制到 DB B,每次来自 DB A 的文档到达 DB B 时,我都想运行一个“存储过程”来删除 DB A 中的大部分字段(DB A 是私有的,但有我想公开的附件)

到目前为止,我已经看到这可以使用 _changes 提要(连续)然后在每个文档上运行“更新”处理程序来实现。

文档更新处理程序文档:https://wiki.apache.org/couchdb/Document_Update_Handlers

这似乎是 CouchDB 将为我实现的东西......(我还不确定如何执行上述操作)。

是否可以在进入数据库的每个文档上运行类似于“挂钩”的东西?

== 编辑 ==

似乎我想以某种方式在复制触发器中包含更新处理程序命令?

【问题讨论】:

您不能在复制期间使用更新处理程序,您可能需要一个单独的进程来读取来自 DB A 的 _changes 提要并将文档推送到 DB B。跨度> 【参考方案1】:

这听起来像是对存储文档的方式进行了一些更改,您可能能够从 CouchDB 的过滤复制中受益。您需要将附件存储在可以在两个数据库之间等效复制(无需修改)的文档中。

如果这不是一个选项,那么您可能会使用transform-pouchdb 加上PouchDB's .replicate.from() 方法来管理复制。

这个想法的一些快速伪代码看起来有点像这样:

var PouchDB = require('pouchdb');
PouchDB.plugin(require('transform-pouch'));

var dbA = new PouchDB('a'); // "a" could be a URL to CouchDB or Cloudant
var dbB = new PouchDB('b');

dbB.transform(
  incoming: function (doc) 
    // do something to the document before storage
    return doc;
  
);

dbB.replicate.from(dbA);

理论上,那个(或类似的东西)应该做你想做的事……或者至少给你一个框架来做你想做的事。 ^_^

希望有帮助!

【讨论】:

谢谢。我所做的是提供一个登录页面,该页面会在成功的身份验证中将您重定向到正确的 url(原始请求中的一个参数) 哦。整洁的。 :) 如果您认为它有用,介意在这里接受我的回答吗?我会很感激的。 :)

以上是关于您可以将 CouchDB 的“文档更新处理程序”与复制一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

CouchDB 与 HBase

将 couchdb 与 Android 应用程序捆绑在一起

如何从命令行启动CouchDB

Django & Couchdb:如何在没有 Apache 服务器的情况下进行部署

同一设备上的每个用户一个pouchDB与单个CouchDB同步

CouchDB IP 地址和端口