我有一个关于使用mgo在MongoDB中存储的问题。 我的DB有这样的结构:
{
"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{},
}
我的主要目标是,当我插入“人物”字样时会出现默认值。内有这个: " abonnements":{ " newsletter":false }
答案 0 :(得分:1)
似乎只是一个错字
Abonnements : []Abonnement{}
答案 1 :(得分:1)
也许是这样的。首先定义一个返回指向结构的指针的函数:
func NewAbonnement()(ab *Abonnement){
return &Abonnement{Newsletter: false}
}
然后将该函数称为Abonnement slice literal:
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()},
}
答案 2 :(得分: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 : "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是可选的,因此如果值为空,它们将不会出现在您的数据库中。