Unstrukturierte MongoDB-Sammlungen mit mgo
Ich bin SEHR neu zu Gehen. Von dem, was ich gesehen habe in den Beispielen von mGo, um die Abfrage eine collection und dann noch Lesen zu können, müssen Sie vorgeben, dass die Daten, die zurück kommen in ein struct.
type Person struct {
ID bson.ObjectId `bson:"_id,omitempty"`
Name string
Phone string
Timestamp time.Time
}
In PHP, das Dokument zugewiesen wurde, um ein array. Das war perfekt, wie man aufzeichnen kann völlig unterschiedliche Schlüssel (enthalten nicht den Namen oder die Telefon -, aber Sie beinhalten E-Mail) und ich konnte direkt auf ihn zugreifen, ohne eine vordefinierte Klasse /Struktur /variable.
Gibt es eine Möglichkeit, das gleiche zu tun in der Go /mGo?
InformationsquelleAutor der Frage kwolfe | 2013-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere Möglichkeiten, man kann damit umgehen.
Mit einer Karte:
Beachten Sie, dass es nichts besonderes über bson.M soweit mgo betroffen ist. Es ist nur ein
map[string]interface{}
Typ, und definieren Sie Ihre eigenen map-Typen und verwenden Sie Sie mit mgo, selbst wenn Sie einen anderen Wert geben.Mithilfe einer Dokument-Scheibe:
Den bson.D ist eine Scheibe, die ist intern bekannt, mgo, und es besteht sowohl für das Angebot eines effizienteren Mechanismus und bieten eine Möglichkeit zum beibehalten der Reihenfolge der Tasten, die verwendet wird, von MongoDB in einigen Fällen (zum Beispiel bei der Definition von Indizes).
Beispiel:
Mit einem inline-anzeigen-Feld
Den
,inline
bson Flagge kann auch verwendet werden, in einem map-Feld, so dass Sie können Ihren Kuchen haben und ihn auch Essen. In anderen Worten, es ermöglicht die Verwendung einer Struktur, so dass die Manipulation von bekannten Felder ist bequem, und zur gleichen Zeit ermöglicht den Umgang mit unbekannten Feldern über die inline-anzeigen.Beispiel:
InformationsquelleAutor der Antwort Gustavo Niemeyer
Könnten Sie speichern alles in einer Karte. Die
mgo/bson
- Paket bietet einebson.M
Datentyp, der verwendet werden kann zum speichern von willkürlichen Daten und da MongoDB nicht durchsetzen einer stark schemamgo
verwendet diebson.M
Typ intern für alles.Wenn Sie nur wollen, um die Daten anzuzeigen, mit einem
bson.M
sollte in Ordnung sein, aber sobald Sie zu arbeiten beginnen möchten, sollten Sie erwägen, ein struct statt. Ansonsten müssten Sie eine Menge von Typ-Behauptungen in Ihrem Programm. Zum Beispiel, betrachten Sie drucken möchten, den Titel (result["title"]
) des Dokuments in Großbuchstaben. Mit nurbson.M
würde der code so Aussehen:Ihrem Programm würde sich sehr viel besser lesbar und einfacher zu pflegen, wenn Sie lassen Sie
mgo
konvertieren der Daten in ein struct für Sie. Dann wird der gleiche code kann gelesen werden als:Normalerweise definieren Sie einen struct-Typ für jede Art von Dokument, das Sie Bearbeiten möchten (D. H. ein Typ für "Benutzer", ein "blog-Beiträge", etc.) enthält alle attribute, die Sie möglicherweise zugreifen möchten. Wenn Ihr Dokument nicht zufällig einen E-Mail-Adresse zugeordnet, wird Ihnen nur eine leere Zeichenfolge (oder allgemeiner, die den Wert null) zurück, wenn Sie Sie entschlüsseln.
InformationsquelleAutor der Antwort tux21b