mgoにおけるDBRef-データ追加試験
3648 ワード
2014-1-25
mongoデータベースを設計する際に、ログ情報テーブルは人員情報テーブルのデータを参照する必要があるという問題がある.構造化データベースであれば、基本的にあまり考えなくてもいいです.構造化されていないデータベースに接触したばかりなので、本の理解ではログの数が多いため、埋め込みデータを採用すると可変要素が多すぎます(これが合理的かどうか分かりませんが、例えば、人員が各部門でジャンプするとデータが常に変更されます^^!)、したがって、参照データ方式を用いる必要がある.今日はまずデータを挿入するテストDEMOを書いて、時間があってからクエリーを補充します.
上には2つの集合、1つの人員情報、1つのログ情報が用いられ、主なテストはログテーブルに人員情報の参照を挿入することである.実行結果は次のとおりです.
参照先:
mongoデータベースを設計する際に、ログ情報テーブルは人員情報テーブルのデータを参照する必要があるという問題がある.構造化データベースであれば、基本的にあまり考えなくてもいいです.構造化されていないデータベースに接触したばかりなので、本の理解ではログの数が多いため、埋め込みデータを採用すると可変要素が多すぎます(これが合理的かどうか分かりませんが、例えば、人員が各部門でジャンプするとデータが常に変更されます^^!)、したがって、参照データ方式を用いる必要がある.今日はまずデータを挿入するテストDEMOを書いて、時間があってからクエリーを補充します.
package main
import (
"crypto/rand"
"encoding/hex"
"fmt"
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
"time"
)
var (
mgoSession *mgo.Session
databaseName = "myDB"
tbl_person = "persons"
tbl_log = "logs"
)
type Person struct {
Id string
Name string
Inserted time.Time
}
type Log struct {
LogId string
Log string
LogUser mgo.DBRef
Inserted time.Time
}
func main() {
session, err := mgo.Dial("localhost:27017")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
session.DB(databaseName).DropDatabase()
c := session.DB(databaseName).C(tbl_person)
d := session.DB(databaseName).C(tbl_log)
tid := GenerateUUID()
err = c.Insert(&Person{tid, "ssl", time.Now()})
if err != nil {
panic(err)
}
err = d.Insert(&Log{GenerateUUID(), " ", mgo.DBRef{tbl_person, tid, databaseName}, time.Now()})
if err != nil {
panic(err)
}
result := []Person{}
err = c.Find(bson.M{}).All(&result)
if err != nil {
panic(err)
}
fmt.Println(result)
result1 := []Log{}
err = d.Find(bson.M{}).All(&result1)
fmt.Println(result1)
}
// http://www.ashishbanerjee.com/home/go/go-generate-uuid
func GenerateUUID() string {
uuid := make([]byte, 16)
n, err := rand.Read(uuid)
if n != len(uuid) || err != nil {
return ""
}
uuid[8] = 0x80 // variant bits see page 5
uuid[4] = 0x40 // version 4 Pseudo Random, see page 7
return hex.EncodeToString(uuid)
}
上には2つの集合、1つの人員情報、1つのログ情報が用いられ、主なテストはログテーブルに人員情報の参照を挿入することである.実行結果は次のとおりです.
[ `run` | done: 2.279229602s ]
[{0d5f77aa40146d128076f74fb0a8c926 ssl 2014-01-25 10:40:14.212 +0800 CST}]
[{2d9250164069986580a760bca46d0e9b {persons 0d5f77aa40146d128076f74fb0a8c926 myDB} 2014-01-25 10:40:16.241 +0800 CST}]
参照先: