Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inserting struct in mongodb in Golang

Tags:

mongodb

go

I am trying to insert a struct in mongo database.

type SecretsStruct struct {
   UserID string `bson:"userid" json:"userid"`
   secretOne string `bson:"secret_one" json:secret_one`
   secretTwo string `bson:"secret_two" json:secret_two`
   secretThree string `bson:"secret_three" json:secret_three`
 }

func (c *SecretsStruct) SetSecrets(userId string, encryptedKeys   
      [][]byte){
   c.UserID = userId
   c.secretOne = hex.EncodeToString(encryptedKeys[0])
   c.secretTwo = hex.EncodeToString(encryptedKeys[1])
   c.secretThree = hex.EncodeToString(encryptedKeys[2])
   log.Printf("This is the c %s", c)
 }

 g := SecretsStruct{}
 g.SetSecrets(userStruct.UserID, encryptedKeys)
 err = secretCollection.Insert(g)
 if err != nil {
      panic(err)
  }

I have tried inserting the byte arrays corresponding to the secrets but of no help. The result which gets populated to the corresponding insertion operation is :

{'_id': ObjectId('5b80117c118c660aaa0c87c2'),
'userid': 'eb19d220-ef13-43aa-8a7f-f78637718000'}

On the other hand, if I try to insert same data with a map but without struct.

secretCollection.Insert(bson.M{"userid": userStruct.UserID,
    "secret_one": encryptedKeys[0],
    "secret_two": encryptedKeys[1],
    "secret_three": encryptedKeys[2]})

The insertion operation executes successfully.

like image 733
GraphicalDot Avatar asked Dec 08 '22 14:12

GraphicalDot


1 Answers

You have to export your struct fields, so that another package (in this case mgo) can access them:

type SecretsStruct struct {
    UserID string `bson:"userid" json:"userid"`
    SecretOne string `bson:"secret_one" json:secret_one`
    SecretTwo string `bson:"secret_two" json:secret_two`
    SecretThree string `bson:"secret_three" json:secret_three`
}
like image 200
mbuechmann Avatar answered Dec 11 '22 09:12

mbuechmann