2016-09-04 1 views
0

Ich habe eine Frage bezüglich der Speicherung in MongoDB mit mgo. My DB hat diese Struktur:Einfügen von verschachtelten Strukturen in MongoDb mit Golang

{ "Arrival": [ "04-09-2016" ], "Clicks": [ "56ffd41d9c8c9adf088b4576", "4f1dc63a7c2d3817640000a1" ], "Recherches": [ "érysipèle" ], "abonnements": { "newsletter": false }, "compte": "Standard", "datei": ISODate("2016-09-04T14:55:39.179Z"), "email": "_°°°°_", "mdp": "27d8d166ca1f1715541b7df6453401b95a1d59c2ca0f60ce71037d33926c4d6f09a63a909a8d5cb5230f92584973a4dd2b8bcf155d5785ef7e2afdd113334eee", "type": "T&D", "user": "_°°°°_", "validation": "validé" }

In meiner Go-Anwendung sind die Strukturen:

Meine Strukturen sind:

type Abonnement struct { 
    Newsletter bool bson:"newsletter"' 
    } 

type Persone struct { 
    Compte string 'bson:"compte"' 
    Datei time.Time 'bson:"datei"' 
    Email string 'bson:"email"' 
    MDP string 'bson:"mdp"' 
    Type string 'bson:"T&D"' 
    User string 'bson:"user"' 
    Validation string 'bson:"validation"' 
    Arrival []string 'bson:"Arrival"' 
    Clicks []string 'bson:"Clicks"' 
    Recherches []string 'bson:"Recherches"' 
    Abonnements []Abonnement 'bson:"abonnements"' 
    } 

Aber ich kann nicht verwalten die Variable zu erstellen setze alles zusammen:

personita := Persone{ Compte : "Standard", Datei : time.Date(2015, time.February, 12, 04, 11, 0, 0, time.UTC), Email : "[email protected]", MDP : "test_mdp", Type : "T&D", User : "test_user", Validation : "validé", Arrival : []string{}, Clicks : []string{}, Recherches : []string{}, Abonnements : []Abonnement{}, }

Mein Hauptziel wäre, dass es ein Standardwert ist, wenn ich 'personita' mit diesem innen einfügen: "Abos": { "Newsletter": false }

+1

Sie verpassen ein {} am Ende von [] Abonnement – Sridhar

+0

Wie kann ich den Standardwert für Abonnements hinzufügen? "Abonnements": {"newsletter": false} @Sridhar – Juanse

Antwort

1

Scheint nur ein Tippfehler

Abonnements : []Abonnement{} 
+0

Wie kann ich den Standardwert für Abonnements hinzufügen? @uvelichitel "Abos": { "Newsletter": false } – Juanse

+0

Abonnements: [] {{false abonnement}} – Uvelichitel

+0

Das Problem bei dieser Lösung ist, dass es schafft: "Abos": [{ "Newsletter": false }] und ich möchte: {"abonnements": {"newsletter": false}} – Juanse

1

Vielleicht so etwas. Zunächst eine Funktion definieren, die einen Zeiger auf die Struktur zurückgibt:

func NewAbonnement()(ab *Abonnement){ 
    return &Abonnement{Newsletter: false} 
} 

Dann rufen die Funktion als Abonnement slice literal:

personita := Persone{ 
     Compte : "Standard", 
     Datei : time.Date(2015, time.February, 12, 04, 11, 0, 0, time.UTC), 
     Email : "[email protected]", 
     MDP : "test_mdp", 
     Type : "T&D", 
     User : "test_user", 
     Validation : "validé", 
     Arrival : []string{}, 
     Clicks : []string{}, 
     Recherches : []string{}, 
     Abonnements : []Abonnement{*NewAbonnement()}, 
    } 

Playground

+0

Das Problem bei dieser Lösung ist, dass es schafft: "Abos": [{ "Newsletter": false}] und ich würde wie: {"abonnements": {"newsletter": false}} – Juanse

+0

Dann versuchen Sie dies: https: //play.golang.org/p/m8fU_Mp3w_ – kingSlayer

+0

In der Bearbeitung habe ich eine Map erstellt, die Map dann zu json gemarshallt und die Zeichenfolge als Zeichenfolge zu Abonnements zugewiesen. – kingSlayer

0

Die Lösung für verschachtelte Strukturen zu tun:

type Abonnement struct { 
    Newsletter bool `bson:"newsletter"` 
    StripeID string `bson:"stripe_id,omitempty"` 
    StripeSub string `bson:"stripe_sub,omitempty"` 
} 

type Personne struct { 
    Compte string `bson:"compte"` 
    Datei time.Time `bson:"datei"` 
    Email string `bson:"email"` 
    MDP string `bson:"mdp"` 
    Type string `bson:"T&D"` 
    User string `bson:"user"` 
    Validation string `bson:"validation"` 
    Arrival []string `bson:"Arrival"` 
    Clicks []string `bson:"Clicks"` 
    Recherches []string `bson:"Recherches"` 
    Abonnements Abonnement `bson:"abonnements"` 
} 

und dann:

personita := Personne{ 
    Compte : "Standard", 
    Datei : time.Date(2015, time.February, 12, 04, 11, 0, 0, time.UTC), 
    Email : "[email protected]", 
    MDP : "test_mdp", 
    Type : "T&D", 
    User : "test_user", 
    Validation : "validé", 
    Abonnements : Abonnement{false,"",""}, 
    } 

if err := coll.Insert(personita); err != nil {panic(err)} 

Auf diese Weise haben Sie den verschachtelten JSON zu MongoDB mit Standardwerten hinzugefügt.

Darüber hinaus sind StripeID oder StripeSub in diesem speziellen Fall optional. Wenn der Wert leer ist, werden sie daher nicht in Ihrer Datenbank angezeigt.

Verwandte Themen