猿问

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

我将数据存储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 terminate

for {

    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并且考虑到我只需要通过初始查询(绝对)的条目,这将是很多跳过我不需要的数据


Output

day 0:


day 1: 

  has old data

day 2:

  has old data

  has old data

day 3:

  has old data

  has old data

  has old data



慕标5832272
浏览 84回答 2
2回答

万千封印

Firestore 没有任何动态参数或类似的东西。如果要请求新时间戳的数据,则必须使用新时间戳运行新查询。因此,大多数应用程序都会运行定期查询来清理过期数据。

心有法竹

我找到了一种使用函数来归档我想要的效果的方法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 terminatefor {    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()))    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答