2015-05-11 100 views
4

我有一個字符串(〜180字符長度)爲datastore.ByteString類型,我希望它被索引,以便能夠按類型進行過濾。無法索引的數據存儲BLOB

keys, err := datastore.NewQuery("User"). 
    Filter("SubscriptionToken= ", []byte(subscriptionToken)).Count(c) 

當我試圖篩選我得到這個錯誤:

{Service:"datastore_v3", Detail:"Property \"SubscriptionToken\" has a value meaning BLOB that cannot be indexed.", Code:1} 

,我想唯一的原因是字節串的大小大於1500K更大,它可以」被索引?

但我不知道如何檢查字節串的大小。

UPDATE:我這是怎麼插入用戶實體

type User struct { 
    UserEmail   string 
    SubscriptionToken datastore.ByteString 
} 
//subscriptionToken has value 
u := User{ 
      UserEmail:   userEmail, 
      SubscriptionToken: datastore.ByteString(subscriptionToken), 
     } 

k := datastore.NewKey(c, "User", userKey, 0, nil) 
     _, err = datastore.Put(c, k, &u) 
     if err != nil { 
      log.Debugf(c, "Write datastore.Put: %#v ", err) 
      return err 
     } 

回答

1

的錯誤消息表明您在數據存儲有User實體有一個屬性SubscriptionTokenByteString類型不能不而是[]byte

[]byte類型的屬性未編制索引。

如果你想Byte類型片的屬性被編入索引,當您保存實體,屬性必須有datastore.ByteString類型的值,例如:

type User struct { 
    SubscriptionToken datastore.ByteString 
} 

u := User{SubscriptionToken: datastore.ByteString("somevalue")} 
// Save u 
key, err := datastore.Put(c, datastore.NewIncompleteKey(c, "User", nil), &u) 
if err != nil { 
    // Handle error 
} 

datastore.ByteString基本上是一個字節片([]byte)以及其他內容(目前):它表示您希望將要保存的字節片段編入索引。

而當你試圖通過這個屬性來過濾,屬性值,以濾除必須是[]byte類型的值:

q := datastore.NewQuery("User").Filter("SubscriptionToken=", []byte(subscriptionToken)) 

// If you want to count: 
count, err := q.Count(c) 
if err != nil { 
    // Handle error 
} 

// Query/filter: 
var users []*User 
keys, err := q.GetAll(c, &users) 
if err != nil { 
    // Handle error 
} 

順便說一句,以檢查ByteString值的長度,你可以簡單地使用內建功能len()因爲ByteString是一個字節片([]byte):

length := len(u.SubscriptionToken) 
+0

現在即時得到這個錯誤 datastore.NewQuery返回的錯誤:errors.errorString {S:「數據存儲:BA d查詢過濾器值類型:不支持的數據存儲區值類型:datastore.ByteString「} – MIkCode

+0

此ByteString(subscriptionToken))必須是datastore.ByteString(subscriptionToken)才能編譯? – MIkCode

+0

@MIkCode好的,我試過了代碼,在過濾的時候,你必須指定一個'[] byte'類型的值。發佈的代碼現在可用。 – icza