获取最近 10 分钟内更改的 Firestore 文档的实时更新

Get real time updates on Firestore documents which have been changed within the last 10 minutes

我可以获得在给定时间戳后更改的文档的更新,如下所示:

const q = query(collection(db, "items"), where("lastChange", ">", "1654249598"));
const unsubscribe = onSnapshot(q, (querySnapshot) => {
  // ...
});

但是,我只想获取在过去 10 分钟内更改过的文档的更新,并且我想无限期地继续收听。因此,如果 lastChange 属性 开始时间少于 10 分钟,它将通过 change == 'removed'

从文档快照中删除

所以我想使用类似的东西:

const tenMinutes = 10*60
const constraint = where("lastChange", ">", firestore.FieldValue.serverTimestamp() - tenMinutes) // dynamic time filter
const q = query(collection(db, "items"), constraint);
const unsubscribe = onSnapshot(q, (querySnapshot) => {
  // ...
});

在SQL中,我会写

SELECT * FROM items WHERE lastChange > now() - interval '10 minutes'

是否可以在 Firestore 中创建这样的“动态过滤器”?

查询中的值是不可变的,而“过去 10 分钟”会随着时间而变化。因此意味着无法在单个 Firestore 查询中创建您想要的行为。

您可以在 client-side 代码中取消超出要求范围的结果,定期重新创建查询以匹配当前时间,或者将两者结合。