google app engine - Datastore BLOB that cannot be indexed -


i have string (~180 chars length) datastore.bytestring type, want indexed able filter type.

keys, err := datastore.newquery("user").     filter("subscriptiontoken= ", []byte(subscriptiontoken)).count(c) 

when i'm trying filter i'm getting error:

{service:"datastore_v3", detail:"property \"subscriptiontoken\" has value meaning blob cannot indexed.", code:1} 

the reason think size of bytestring greater 1500k , can't indexed?

but can't figure out how check bytestring size.

update: how insert user entity

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         } 

the error message indicates user entity have in datastore has property subscriptiontoken not of type bytestring rather []byte.

properties of type []byte not indexed.

if want property of type byte slice indexed, when save entity, property must have value of type datastore.bytestring, example:

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 slice ([]byte) , nothing more (at moment): signals want the byte slice being saved indexed.

and when try filter property, property value filter has value of type []byte:

q := datastore.newquery("user").filter("subscriptiontoken=", []byte(subscriptiontoken))  // if want 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 } 

btw check length of bytestring value, can use builtin function len() since bytestring byte slice ([]byte):

length := len(u.subscriptiontoken) 

Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -