golang数据存储投影查询从填充的实体返回空字符串

时间:2016-05-04 12:02:19

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

我目前正在研究在Google App Engine上运行的基于golang http的处理程序。

作为其中的一部分,我试图通过Projection查询来查看我感兴趣的所有值,查看给定类型的多个字段,目的是存储每个实体的负载在镜像字段类型的结构中。

这是我的疑问:

source := datastore.NewQuery("CacheEntry").Project("Campaign", "Creative", "Impressions", "Operator", "Publisher", "Slot").Limit(50)

不幸的是,我从这里得到的只是空字符串(更糟糕的是,返回空字符串不会引发任何类型的错误,所以我只是觉得它正在做这个)。

Google的文档和错误报告在数据存储方面非常糟糕,所以它没有太多帮助。我可以在Google云端控制台中看到我的数据存储区查看器中的填充字段 - 某些字段实际上是空的,但我应该至少返回一些数据。

我在for循环中使用适当的指针设置运行它:

for t := source.Run(ctx); ; {
    _, err := t.Next(&x)

    log.Println(count)
    if err == datastore.Done {
        log.Println("failed on Datastore:done, count \n")
        log.Println(count)
        break
    }
    if err != nil {
        log.Println("failed on \n")
        log.Println(count)
        http.Error(w, err.Error(), http.StatusInternalServerError)
        break
    }
    //  fmt.Fprint(w, x.Campaign)
    if &x != nil {

        fmt.Fprintln(w, "Strings:\n")
        fmt.Fprintln(w, x.Operator)
        if x.Operator == "" {
            fmt.Fprintln(w, "Campaign string is empty")
        }
    }

    count = count + 1

' X'是:

type Row struct {
Campaign    string
Creative    string
Impressions int
Operator    string
Publisher   string
Slot        string

}

我出错的任何想法?

1 个答案:

答案 0 :(得分:1)

想出来,结果发现了一些在后台发生的问题:

  • 无论出于何种原因,索引都没有被更新,并且指示此索引的错误消息未通过Http响应传递,因此查询未运行
  • 清除之后,我没有意识到我所撤回的结果包括大量具有空白属性值且缺乏任何排序的事件,因此它们实际上是在{{ {1}}正在被访问...在这种情况下,查询正在运行,但我解释空字符串返回为错误,实际上它们是正确的,而不是来自我预期的数据集部分 - 为.Limit(50)添加过滤器修复了

数据存储严重需要比其拥有更好的反馈措施。与我曾经使用过的很多类似的dbs相比,它的反馈意见微乎其微。