当 mongodb 集合为空时,响应式可尾游标关闭

Posted

技术标签:

【中文标题】当 mongodb 集合为空时,响应式可尾游标关闭【英文标题】:Reactive tailable cursor is closed when a mongodb collection is empty 【发布时间】:2019-06-11 08:53:37 【问题描述】:

我正在开发一个带有 webflux 的流,该流来自一个带有 spring boot 的 mongodb 集合和带有可尾游标的 spring data mongodb。

当集合有 1 个或更多文档时,流正在工作,因为您可以获得光标。问题是我想用空集合打开流,因为我想流化集合中的每个文档。

我一直在阅读文档,它应该是正确的:

https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#tailable-cursors

Tailable 游标可能会失效或无效,如果查询返回不匹配或游标返回集合“末尾”的文档,然后应用程序会删除该文档

我正在评估使用 Spring Boot 和 Flux 实现此目标的最佳方法(从空集合中打开流),但我想知道是否有一些想法或解决方法。

谢谢。

【问题讨论】:

【参考方案1】:

确实,即使是在空的上限集合上“查找所有”也被视为不匹配,并且光标已失效。 reactiveMongoOperations.tail(new Query(), Event.class) 返回一个死游标,带注释的存储库风格也是如此。 Spring docs 只是复制 mongo docs,其中状态

如果出现以下任一情况,可尾游标可能会失效或无效: 查询不返回匹配项。 光标返回集合“末尾”的文档,然后应用程序 > 删除该文档。

唯一的解决方法似乎是在订阅之前插入一个初始虚拟条目。

【讨论】:

以上是关于当 mongodb 集合为空时,响应式可尾游标关闭的主要内容,如果未能解决你的问题,请参考以下文章

Mongo 可尾游标与 Redis 发布/订阅

MongoDb 仅当数组不为空时才在数组中添加字段

仅当集合为空时才弹出值的直觉

Laravel:当数组为空时数组循环的集合

mongodb详解

当条件全部为空时,查询全部,当其中一个或两个条件为空时,为空的条件不查询,sql怎么写