使用 Golang 在 MongoDb 中插入嵌套结构

我有一个关于使用 mgo 在 MongoDB 中存储的问题。


我的数据库有这样的结构:


{

  "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 : "test@test.com",

      MDP : "test_mdp",

      Type : "T&D",

      User : "test_user",

      Validation : "validé",

      Arrival  : []string{},

      Clicks : []string{},

      Recherches : []string{},

      Abonnements : []Abonnement{},

    }

我的主要目标是当我在里面插入“personita”时有一个默认值:


"abonnements": {

    "newsletter": false

  }


ibeautiful
浏览 283回答 3
3回答

白衣染霜花

似乎只是一个错字Abonnements : []Abonnement{}

倚天杖

也许是这样的。首先定义一个返回结构指针的函数:func NewAbonnement()(ab *Abonnement){    return &Abonnement{Newsletter: false}}然后将该函数称为 Abonnement 切片文字: personita := Persone{      Compte : "Standard",      Datei : time.Date(2015, time.February, 12, 04, 11, 0, 0, time.UTC),      Email : "test@test.com",      MDP : "test_mdp",      Type : "T&D",      User : "test_user",      Validation : "validé",      Arrival  : []string{},      Clicks : []string{},      Recherches : []string{},      Abonnements : []Abonnement{*NewAbonnement()},    }

慕后森

拥有嵌套结构的解决方案是: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 : "test@test.com",    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 是可选的,因此如果值为空,它们将不会出现在您的数据库中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go