为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 firebase 获取“移动查询”

如何使用 firebase 获取“移动查询”

Go
慕标5832272 2022-06-27 17:11:00
我将数据存储timestamps为 ID。where当数据通过查询子句时,我只需要获取新数据。数据在名为 的键中也具有相同的时间戳day。代码是用 Golang 编写的,但它只从函数第一次调用时获取带有静态时间戳的数据。如何通过查询获取最新数据moves?询问snapshots := org.firestoreClient.Collection(     fmt.Sprintf("metrics/%v/%v", "id", "data-collectioin"),).Where("day", ">=", time.Now().UTC().Add(time.Duration(-7) * time.Hour * 24)).Snapshots(context.Background())// Listening loop does not terminatefor {    snapshot, err := snapshots.Next()    if err == iterator.Done {        break    }    if err != nil {        log.Println(err)        continue    }    var decodingErr error    // Doc Iterating loop terminates at the last document    for {        store, vErr := snapshot.Documents.Next()        if vErr != nil {            break        }        // unmarshal data to result struct        // ....        // check for old data         if result.Day.UTC().Before(time.Now().UTC().Add(time.Duration(-7) * time.Hour * 24)) {            log.Println("has old data")            continue        }        // save to cache        addToSlice()    }    saveToCache(slice)}我希望每 24 小时都有新数据,之后运行此查询的服务器将获得新数据。并将数据保存到缓存中也许我的理解是错误的,但是在此查询运行 14 天后,缓存存储区将包含 14 天前的数据,而不仅仅是过去 7 天的数据。我只想拥有过去 7 天的数据。跳过旧数据但数据集很大,if (old-data) continue并且考虑到我只需要通过初始查询(绝对)的条目,这将是很多跳过我不需要的数据Outputday 0:day 1:   has old dataday 2:  has old data  has old dataday 3:  has old data  has old data  has old data
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

Firestore 没有任何动态参数或类似的东西。如果要请求新时间戳的数据,则必须使用新时间戳运行新查询。

因此,大多数应用程序都会运行定期查询来清理过期数据。


查看完整回答
反对 回复 2022-06-27
?
心有法竹

TA贡献1866条经验 获得超5个赞

我找到了一种使用函数来归档我想要的效果的方法


query := func () firestore.Query {

    return org.firestoreClient.Collection(

        fmt.Sprintf("metrics/%v/%v", "id", "collection"),

    ).Where("day", ">=", time.Now().UTC().Add(time.Duration(-7) * time.Hour * 24))

}


// Listening loop does not terminate

for {

    snapshot, err := query().Snapshots(context.Background()).Next()

    // ...

    if cacheIsEmpty {

        // initial data

        // init cache

        addDataToCache(snapshot.Documents))

    } else {

        // clear cache

        // re-run query with new timestamp

        addDataToCache(query().Documents(context.Background()))

    }

}


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信