Posted at

revelでmgo実装テスト その3

More than 5 years have passed since last update.

その2まではDBとのやり取りが中心だったので、実際に取り出した値を加工する方法について実装しておきます。MongoDBにおいて、値を実際に取り出すとbson形成になるのでこれを加工しやすいように元の構造体にマッピングし直すます。実際にDBに登録する構造体は今までのように以下となります。


person.go

ackage models

import (
"labix.org/v2/mgo/bson"
)

var (
err error
)

type Person struct {
PersonID bson.ObjectId `bson:"_id,omitempty" json:"-"`
FirstName string `bson:"firstName" json:"firstName"`
LastName string `bson:"lastName" json:"lastName"`
Nickname string `bson:"nickname" json:"nickname"`
Email string `bson:"email" json:"email"`
SecurityCode int `bson:"securityCode" json:"securityCode"`
}


 次に取り出したbsonデータをPerson構造体にマッピングします。方法としてはbsonデータをjsonに変換し、その後Person構造体にマッピングします。


session.go


package controllers

import (
"github.com/robfig/revel"
"encoding/json"
"labix.org/v2/mgo/bson"
"testApp/app/models"
)

func DecordingBSONtoJSON(bsonData interface{}) models.Person {
rawJsonData, err := json.Marshal(bsonData)
if err != nil {
panic(err)
}

var person models.Person
err = json.Unmarshal(rawJsonData, &person)
if err != err {
panic(err)
}

return person
}


bsonDataはDBから持ってきたbsonデータです。それをjson.Marshal(xxx)で[]byteに変換し、その後json.Unmarshal(yyy)でPersonにマッピングして完了です。少し回りくどいですが一応機能としては問題なく動作しました。