当文档满足条件时,不调用删除



我有一个过期条件,就像 snapchat 一样,当满足过期时间时,它会从查询中删除文档,但在应用程序重新加载或关闭打开之前它不起作用,而不是实时。

法典:

Services().crud.readStream(
stream: this
.collection
.where('user', isEqualTo: APIs().users.collection.document(cUserID))
.where('removeAt', isGreaterThan: Timestamp.now())
.snapshots(),
onEmpty: () {
onEmpty(null);
},
onAdded: (p) {
onAdded(Post().model(id: p.documentID, map: p.data));
return null;
},
onModified: (p) {
onModified(Post().model(id: p.documentID, map: p.data));
return null;
},
onRemoved: (p) {
onRemoved(Post().model(id: p.documentID, map: p.data));
return null;
},
onFailure: (e) {
onFailure(e);
return null;
});

问题是它有效,只是不是实时的。我错过了什么吗?

问题来自这一行:

.where('removeAt', isGreaterThan: Timestamp.now())

这是在运行查询时计算的,这意味着在查询开始时设置Timestamp.now()。因此,当您启动查询时,它将获取未过期的文档,但在侦听器处于活动状态时它不会动态更新(因为Timestamp.now()不会重新评估(。

(目前(无法在 Firestore 查询中动态更新时间戳。但幸运的是,您拥有在客户端中自行实现动态过期的所有信息。由于您知道每个文档的removeAt值,因此可以运行定期检查,并删除或隐藏在快照侦听器处于活动状态时已过期的文档。

最新更新