mgo中DBRef-資料添加測試

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

2014-1-25

  在設計mongo資料庫時遇到這樣一個問題,日誌資訊表需要引用人員資訊表的資料.如果是結構化資料庫,基本上不用想太多的東西.由於剛接觸非結構化資料庫,按著書上的理解由於日誌數量較多,如果採用嵌入式資料的話會產生太多的可變因素(不知道這樣說是不是合理,比如說人員經常在各個部門亂跳則會造成資料經常變更 ^_^!),所以需要用到引用資料方式.今天先寫了個插入資料的測試DEMO,有時間再補上個查詢.

package mainimport ("crypto/rand""encoding/hex""fmt""labix.org/v2/mgo""labix.org/v2/mgo/bson""time")var (mgoSession   *mgo.SessiondatabaseName = "myDB"tbl_person   = "persons"tbl_log      = "logs")type Person struct {Id       stringName     stringInserted time.Time}type Log struct {LogId    stringLog      stringLogUser  mgo.DBRefInserted 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-uuidfunc 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 5uuid[4] = 0x40 // version 4 Pseudo Random, see page 7return hex.EncodeToString(uuid)}

  上面用到了兩個集合,一個人員資訊,一個日誌資訊,主要測試是向日誌表插入人員資訊的引用.運行結果如下:

[ `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}]

  參考:

  • Database References

  • MongoDB之DBref(關聯插入,查詢,刪除) 執行個體深入

  • MongoDB聯集查詢  

  • Go (#golang) and MongoDB using mgo

  • There is some example to use DbRef?

 

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.