Firestore带Limit的实时监听在大量文档新增时是否会遗漏数据?
Firestore带limit的实时监听行为解析
当你的chatLiveListner()监听在会话未中断时遇到数千个符合条件的新增文档,只会保留最新的10个,大部分中间新增的文档会被遗漏,具体逻辑如下:
- 你的查询是按
timesTamp降序取前10条未删除的文档,Firestore的实时监听只会持续返回当前时刻刚好符合这个查询条件的结果集。 - 一旦新增大量文档,这些新文档的
timesTamp更晚(也就是更“新”),会直接挤到结果的最前面,把之前的旧文档挤出前10的范围。每次监听触发回调时,只会给你当前最新的10条,那些被挤出去的中间文档不会被推送给你。
拿聊天室场景类比:如果突然刷出几千条新消息,你的监听只会实时显示最新的10条,那些被新消息压到第11位及以后的消息,根本不会触发监听回调,相当于直接被漏掉了。
要是想跟踪所有新增的文档,得调整查询逻辑,比如记录最后收到的文档的timesTamp,之后用分页查询去补全历史内容,但这不是当前这种实时监听的默认行为。
内容的提问来源于stack exchange,提问作者Mohammed Hamdan
相关产品推荐
相关产品推荐

