当 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 集合为空时,响应式可尾游标关闭的主要内容,如果未能解决你的问题,请参考以下文章