获取最近 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 代码中取消超出要求范围的结果,定期重新创建查询以匹配当前时间,或者将两者结合。
我可以获得在给定时间戳后更改的文档的更新,如下所示:
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 代码中取消超出要求范围的结果,定期重新创建查询以匹配当前时间,或者将两者结合。