2016-09-04 2 views
0

У меня есть вопрос относительно хранения в MongoDB с помощью mgo. My DB имеет такую ​​структуру:Вставьте вложенные структуры в MongoDb с помощью 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é" }

В моем приложении Go структуры являются:

Мои структуры:

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"' 
    } 

Но я не могу управлять, чтобы создать переменную собрать все вместе:

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{}, }

Моя главная цель состояла бы в том, что это значение по умолчанию, когда я вставляю «personita» с этим изнутри: «abonnements»: { «Бюллетень»: ложные }

+1

Вам не хватает {} в конце [] Abonnement – Sridhar

+0

Как добавить значение по умолчанию для abonnements? "abonnements": {"newsletter": false} @Sridhar – Juanse

ответ

1

Кажется только что опечатка

Abonnements : []Abonnement{} 
+0

Как добавить значение по умолчанию для abonnements? @uvelichitel "abonnements": { "бюллетень": ложные } – Juanse

+0

Abonnements: [] {{абонемент ложь}} – Uvelichitel

+0

Проблема этого решения заключается в том, что он создает: "abonnements": [{ "бюллетень" ложь }], и я хотел бы: {"abonnements": {"newsletter": false}} – Juanse

1

Возможно, что-то вроде этого. Сначала определим функцию, которая возвращает указатель на структуру:

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

Затем вызовите функцию как ломтиком абонемент буквального:

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

Проблема этого решения заключается в том, что он создает: "abonnements": [{ "бюллетень" ложь}] и я бы например: {"abonnements": {"newsletter": false}} – Juanse

+0

Затем попробуйте следующее: https: //play.golang.org/p/m8fU_Mp3w_ – kingSlayer

+0

В редактировании я сделал карту, затем маршалировал карту json и назначил строку Abonnments как строку. – kingSlayer

0

Раствор для имеющих Вложенные структуры, чтобы сделать:

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"` 
} 

и затем:

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)} 

Таким образом, у вас есть встроенный JSON, добавленный в MongoDB со значениями по умолчанию.

Кроме того, в данном конкретном случае StripeID или StripeSub являются необязательными, поэтому, если значение пусто, они не будут отображаться в вашей базе данных.