Java 从连续提要获取未删除的文档

Java 从连续提要获取未删除的文档,java,couchdb,Java,Couchdb,我正在寻找一种从CouchDB获取未删除文档的连续提要的方法 Lightcoach jar具有我正在使用的连续提要功能,但它也检索所有文档,包括已删除的文档 现在,我正在阅读所有文档并添加了一个文件 Changes changes = dbClient.changes() .includeDocs(true) .since(0) .heartBeat(1000) .continuousChanges(); 我找到了一个解决办法来读取所有内容并过滤掉删除的内容,但

我正在寻找一种从CouchDB获取未删除文档的连续提要的方法

Lightcoach jar具有我正在使用的连续提要功能,但它也检索所有文档,包括已删除的文档

现在,我正在阅读所有文档并添加了一个文件

Changes changes = dbClient.changes()
    .includeDocs(true)
    .since(0)
    .heartBeat(1000)
    .continuousChanges();
我找到了一个解决办法来读取所有内容并过滤掉删除的内容,但这似乎不是最好的方法

        Flux
            .interval(Duration.ofMillis(1000))
            .map(intervalTicking -> changes)
            .filter(Changes::hasNext)
            .map(Changes::next)
            .filter(row -> !row.isDeleted())
            ...
请建议是否有更好的选择。

提前感谢。

为了从changes提要中筛选未删除的文档,您应该在数据库中的设计文档中定义一个筛选器,如下面定义了筛选器“active doc”的文档

{
  "_id": "_design/filters",
  "language": "javascript",
  "filters": {
    "active-doc": "function(doc, req){\n return (!doc._deleted);\n}\n"
  }
}
在Lightcoach中,您可以在更改提要配置中包括筛选器

Changes changes = dbClient.changes()
    .includeDocs(true)
    .since(0)
    .heartBeat(1000)
    .filter("filters/active-doc")
    .continuousChanges();
现在,您应该只接收来自未删除文档的更改事件

作为替代方案,您可以使用Lightcoach的this,其中mango选择器支持changes提要。使用fork,您不需要在数据库中创建设计文档,只需在客户机中指定选择器即可

Changes changes = dbClient.changes()
    .includeDocs(true)
    .since(0)
    .heartBeat(1000)
    .selector("{\"selector\": { \"_deleted\": {\"$exists\":  false}}}")
    .continuousChanges();

为了从changes提要中过滤未删除的文档,您应该在数据库中的设计文档中定义一个过滤器,如下面定义过滤器“active doc”的文档

{
  "_id": "_design/filters",
  "language": "javascript",
  "filters": {
    "active-doc": "function(doc, req){\n return (!doc._deleted);\n}\n"
  }
}
在Lightcoach中,您可以在更改提要配置中包括筛选器

Changes changes = dbClient.changes()
    .includeDocs(true)
    .since(0)
    .heartBeat(1000)
    .filter("filters/active-doc")
    .continuousChanges();
现在,您应该只接收来自未删除文档的更改事件

作为替代方案,您可以使用Lightcoach的this,其中mango选择器支持changes提要。使用fork,您不需要在数据库中创建设计文档,只需在客户机中指定选择器即可

Changes changes = dbClient.changes()
    .includeDocs(true)
    .since(0)
    .heartBeat(1000)
    .selector("{\"selector\": { \"_deleted\": {\"$exists\":  false}}}")
    .continuousChanges();

您可以使用_更改上的过滤器直接在CouchDB级别进行过滤。您可以使用mango筛选器来筛选_deleted:true document only。谢谢,Alexis,CouchDB中的筛选器工作正常。您可以使用_更改上的筛选器直接在CouchDB级别进行筛选。你可以使用芒果过滤器来过滤_deleted:true document only。谢谢,Alexis,CouchDB中的过滤器工作正常。谢谢@Juanjo提供的简短示例。这很有帮助。谢谢@Juanjo提供的简短示例。这很有帮助。