【问题标题】:How to filter by date/time in Google App Engine Datastore using GoLang如何使用 GoLang 在 Google App Engine Datastore 中按日期/时间进行过滤
【发布时间】:2014-10-21 19:43:06
【问题描述】:

我正在开发在 Google App Engine 上运行的 golang 后端。我有一个名为 Recruit 的实体,它有一个属性

UpdatedAt time.Time `datastore:"updated_at"`

我想按更新时间查询新兵。我的第一直觉是使用filter

query = datastore.NewQuery("Recruit").Filter("updated_at <=", updatedAt)

updateAt 是一个字符串。我尝试了2014-08-28 01:53:192014-08-28T01:53:19.00618Z 的形式(前者是time.Time 属性在数据存储中采用的形式,而后者是它在JSON 中的传播方式。)

当我使用&lt;= 调用查询时,将返回所有 Recruit 对象。使用&gt;= 调用时,返回null。我很确定我正在测试数据集中间的时间。

当我在 console.developers.google.com 上进行测试时,控制台过滤器支持 a date and time after/before,但尝试将 &lt;= 替换为 after 会导致错误。

有人设法按日期或时间过滤查询吗?

【问题讨论】:

    标签: google-app-engine go google-cloud-datastore


    【解决方案1】:

    尝试使用 time.Time 类型的 updatedAt 而不是字符串

    以下是我如何设法按时间过滤查询的 sn-p:

    我的财产:

    TimeStamp time.Time
    

    我的查询:

    timeNow := time.Now()
    time1hr := timeNow.Add(-59*time.Minute)
    q := datastore.NewQuery("Recruit").Filter("TimeStamp <=", time1hr)
    

    此代码将在 time1hr 之前为我提供所有实体。

    【讨论】:

    • 在这种情况下,您可能还会发现 time.Parse 很方便。这是一个很好的 SO 答案,显示了它的用法:stackoverflow.com/questions/14106541/…
    • 成功了!我开始将时间存储为 int,作为一种解决方法,但这要好得多。应该预料到过滤器参数需要是相同的类型。 @JoeBergevin,我确实使用了解析。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2014-10-04
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多