gpt4 book ai didi

java - 从 couch-db 更改连续提要中获取未删除的文档

转载 作者:行者123 更新时间:2023-12-02 00:47:05 25 4
gpt4 key购买 nike

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

Lightcouch 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())
...

请建议是否有更好的选择。
提前致谢。

最佳答案

为了从更改源中过滤未删除的文档,您应该在数据库的设计文档中定义一个过滤器,如下所示,其中定义了过滤器“active-doc”。

{
"_id": "_design/filters",
"language": "javascript",
"filters": {
"active-doc": "function(doc, req){\n return (!doc._deleted);\n}\n"
}
}

在 LightCouch 中,您可以将过滤器包含在更改源配置中。

Changes changes = dbClient.changes()
.includeDocs(true)
.since(0)
.heartBeat(1000)
.filter("filters/active-doc")
.continuousChanges();

现在您应该只收到未删除文档的更改事件。

作为替代方案,您可以使用此 fork LightCouch 的更改源支持芒果选择器。使用 fork,您不需要在数据库中创 build 计文档,只需在客户端中指定选择器即可。

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

关于java - 从 couch-db 更改连续提要中获取未删除的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57887501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com