【问题标题】:How to use firestore.FieldValue.serverTimestamp() in query如何在查询中使用 firestore.FieldValue.serverTimestamp()
【发布时间】:2019-09-07 19:09:08
【问题描述】:

我想在 google cloud firestore 中创建一个查询来检索过去 10 小时内创建的数据,但我想使用服务器日期作为帐户的基础。

类似:

this.afs.collection<any>("posts/", ref => {
  let query: firebase.firestore.CollectionReference | firebase.firestore.Query = ref;

  tenHoursAgo = firebase.firestore.FieldValue.serverTimestamp() - 10; 
  query = query.where('created', '>', tenHoursAgo);

  return query.orderBy('created');
}).snapshotChanges()

我该怎么做?感谢您的帮助。

【问题讨论】:

    标签: node.js google-cloud-firestore


    【解决方案1】:

    您不能在查询中使用FieldValue.serverTimestamp() 作为值。

    两种可能的解决方法:

    1. 最简单的接近方法是使用客户端的本地当前时间戳:new Date()

    2. 更复杂的替代方法是让客户端写入 FieldValue.serverTimestamp(),然后将其读回,并在查询中使用结果值。

      这将使您免受客户时钟中任何偏差的影响。这是否值得额外的复杂性由您决定。

    【讨论】:

    • 日期很难,我也没那么聪明。但也许真正的答案是我们在查询 Firestore 时不需要担心时区?看起来 Firestore 将 Date 对象存储为 utc 无论如何(来自 Timestamp 文档),我假设查询方法在与具有时区信息的 Date 对象进行比较时会考虑到这一点,对吧?
    猜你喜欢
    • 2019-01-13
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多