2017-12-27 3 views
0

ich oft eine Situation erlebt habe, wo ich so etwas wie diese:effizient Datenspeicher-Tags zu speichern (für get durch Tags Zwecke)

type Article struct { 
    Title string 
    User string 
    Content []byte 
    Tags []string 
} 

Wo ich Abfrage Aufgaben wie diese ausführen zu können, möchte:

var articles []Article 
query := datastore.NewQuery("Article") 
for _, filter := range filters { 
    if filter.User != "" { 
     query = query.Filter("User =", filter.User) 
    } 
    // how to do if for finding tags 
} 
keys, err := DatastoreClient().GetAll(ctx, query, &articles) 
if err != nil { 
    return nil, err 
} 
return articles, nil 

ist ein Artikel Lassen Sie sagen, haben Sie die folgenden Tags []string{"golang", "ruby", "python", "programming"} und ich möchte alle Artikel abrufen, die die Tags golang und programming enthalten, wie könnte ich dies effizient erreichen?

Antwort

1

Suche im Array im Datenspeicher unter Verwendung von Gleichheitszeichen funktioniert wie enthält.

https://cloud.google.com/datastore/docs/concepts/queries#properties_with_array_values_can_behave_in_surprising_ways

Das bedeutet, dass Sie eine Abfrage mit zwei gleichen Filter von dieser Immobilie machen müssen. Beispiel für GQL.

SELECT * FROM Article WHERE Tags = "golang" AND Tags = "prgramming". 

Tags Wenn ein Array ist, wird gleich verhalten, als enthält. Dass es. Der ganze Trick.

+0

Wow, keine Ahnung, wie ich das verpasst habe .. klingt fast zu gut, um wahr zu sein .. vielen Dank <3 – fisker

Verwandte Themen