2012-09-13 91 views
1

我正在使用Go API使用Google App Engine,儘管我嘗試了一切,但無法使Queries返回數據存儲中的數據。我可以看到,Put()作品如預期,而實體可列/訪問從現有的管理控制檯檢查從dev_appserver.pyGoogle App Engine中的查詢/數據存儲問題 - Go API

的結構我存儲的定義是這樣的:

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的結果,即使在控制檯告訴我還有很多。我試過了,但是在SDK提供的留言簿示例之後,我們沒有使用Filter調用,結果無濟於事。

在情況下,它帶有按鍵的問題(可能性不大,如果我理解正確的話,因爲我查詢上的屬性),調用Put如下:

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

任何幫助,將不勝感激,謝謝!^_^

+0

注意,你不一定需要一個指針傳遞給'[] * TweetData'到'GetAll',一個指向'[] TweetData'也能正常工作。 – proppy

回答

2

查詢要求排序由Id desc,而索引字段是沒有索引,你應該:

  • 改寫TweetData註釋索引編號字段:

Id int64 `json:"id"`

  • 刪除您的查詢的順序子句:

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

+0

謝謝!我忘了更新問題,但發現這是答案。我期望索引只對Filter階段有用,而不是對已經收到的結果進行排序......好吧,我們知道他們對假設的看法:-p –

+0

是的,每次需要執行查詢操作時都需要索引取決於實體屬性值。 – proppy

相關問題