2015-06-29 6 views
5

Wie ich weiß, können wirWählen Sie Spalte von MongoDB in golang mit mgo

> db['twitter-3'].find({}, {"text": 1}) 

verwenden, um alle Texte in der Sammlung auszuwählen.

Wie können wir mgo verwenden, um ein bestimmtes Feld in Golang zu finden? Ich versuchte

var result []string 
err = conn.Find(bson.M{}, bson.M{"text", 1}).All(&result) 

Aber es ist nicht richtig.

Antwort

12

Verwenden Sie die Abfrage Select Methode die Felder angeben, zurückzukehren:

var result []struct{ Text string `bson:"text"` } 
err := c.Find(nil).Select(bson.M{"text": 1}).All(&result) 
if err != nil { 
    // handle error 
} 
for _, v := range result { 
    fmt.Println(v.Text) 
} 

In diesem Beispiel habe ich erklärt, einen anonymen Typ mit dem einen ausgewählten Bereich. Es ist in Ordnung, einen Typ mit allen Dokumentenfeldern zu verwenden.

+0

In der Struktur, was bedeutet 'BSON: "text"' stehen? Gibt es einen Hinweis, den ich überprüfen kann, um ein besseres Verständnis dafür zu haben? – Wyatt

+1

Weitere Informationen dazu, wie das Paket Feldtags verwendet, finden Sie in der Dokumentation zu [bson package] (http://godoc.org/labix.org/v2/mgo/bson#Marshal). –

+1

Danke! Wie wählt man mehrere Spalten aus? Das Hinzufügen von Select (bson.M {"text": 1, "anotherColumn": 1}) funktioniert nicht. – Amol

0

mehrere Felder auszuwählen:

var result []struct{ 
    Text string `bson:"text"` 
    Otherfield string `bson:"otherfield"` 
} 

err := c.Find(nil).Select(bson.M{"text": 1, "otherfield": 1}).All(&result) 
if err != nil { 
    // handle error 
} 
for _, v := range result { 
    fmt.Println(v.Text) 
} 
Verwandte Themen