Google App Engine中的查询/数据存储问题 - Go API

时间:2012-09-13 20:18:31

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

我正在使用Go API玩Google App Engine,尽管我尝试了一切,但我无法让Queries返回数据存储区中的数据。我可以看到Put()按预期工作,并且可以通过检查dev_appserver.py

中提供的管理控制台来查看/访问实体

我存储的结构是这样定义的:

type TweetData struct {
    Id int64 `datastore:",noindex" json:"id"`
    Text string `datastore:",noindex" json:"text"`
    Screen_name string `json:"screen_name"`
}

我打电话询问它是这样的:

func getDatastoreTweets(c appengine.Context, twitterUser string) []*TweetData {
    q := datastore.NewQuery("TweetData").Filter("Screen_name =", twitterUser).Order("-Id").Limit(10)

    var oldTweets []*TweetData
    if _, err := q.GetAll(c, &oldTweets); err != nil {
        fmt.Printf("Getall had non-nil error! %v\n", err)
    }   

    return oldTweets
}

对于此查询,err永远不会是非零,但始终返回0结果,即使控制台告诉我有很多结果。我在没有Filter调用的情况下尝试过,在SDK提供的留言板示例之后,无济于事。

如果是密钥问题(如果我理解正确,可能不太可能,因为我正在查询属性),对Put的调用如下:

// tweetData passed in via parameter...
key := datastore.NewIncompleteKey(c, "TweetData", nil)
_, err := datastore.Put(c, key, &tweetData)

任何帮助将不胜感激,谢谢! ^ _ ^

1 个答案:

答案 0 :(得分:2)

查询要求按Id desc排序,而索引字段未编入索引,您应该:

  • 将TweetData注释重写为索引Id字段:

Id int64 `json:"id"`

  • 删除查询的订单子句:

q := datastore.NewQuery("TweetData").Filter("Screen_name =", twitterUser).Limit(10)