Golang 與mongodb的交互。嵌套struct

mongodb這類nosql數據庫,還是先定義結構比較好啊。存取方便。蛋疼的是golang定義個嵌套的struct好費勁啊。。
primitive.NewObjectID() 可以生成一個mongodb的_id,找了半天這個函數。網上都是 mgo的函數。好像好久不更新了。mongo-driver是mongodb的官方驅動?所以不用第三方的了吧。

package books

import (
    "context"
    "fmt"

    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"

    //////////////"go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/bson/primitive"
)

var (
    cctn *mongo.Collection
)

type ReaderInfo struct {
    UserID   int64  `json:"userid" bson:"userid"`
    NickName string `json:"nickname" bson:"nickname"`
}

type ProBlockInfo struct {
    L int64 `json:"l" bson:"l"`
    T int64 `json:"t" bson:"t"`
    R int64 `json:"r" bson:"r"`
    B int64 `json:"b" bson:"b"`
}

type PageInfo struct {
    MPic       string         `json:"mpic" bson:"mpic"`
    CreateTime int64          `json:"createtime" bson:"createtime"`
    ProBlock   []ProBlockInfo `json:"problock" bson:"problock"`
    BPic       []string       `json:"bpic" bson:"bpic"`
}

type BookInfo struct {
    ID          primitive.ObjectID `json:"id" bson:"_id"`
    UserID      int64              `json:"userid" bson:"userid"`
    CreateTime  int64              `json:"createtime" bson:"createtime"`
    Name        string             `json:"name" bson:"name"`
    PageNum     int64              `json:"pagenum" bson:"pagenum"`
    Author      string             `json:"author" bson:"author"`
    AuthorTime  int64              `json:"authortime" bson:"authortime"`
    PublishTime int64              `json:"publishtime" bson:"publishtime"`
    ISBN        string             `json:"isbn" bson:"isbn"`
    Publisher   string             `json:"publisher" bson:"publisher"`
    Readed      int64              `json:"readed" bson:"readed"`
    Liked       int64              `json:"liked" bson:"liked"`
    Reader      []ReaderInfo       `json:"reader" bson:"reader"`
    Liker       []ReaderInfo       `json:"liker" bson:"liker"`
    Tags        []string           `json:"tags" bson:"tags"`
    Pages       []PageInfo         `json:"pages" bson:"pages"`
}

func Init(client *mongo.Client) {
    cctn = client.Database("Shot4Read").Collection("books")
}

func GetBooks(startIdx int64, pageSize int64) {
    if cursor, err := cctn.Find(context.Background(), bson.M{}, options.Find().SetLimit(pageSize).SetSkip(startIdx), options.Find().SetSort(bson.M{"CreateTime": -1})); err == nil {
        defer cursor.Close(context.Background())
        for cursor.Next(context.Background()) {
            //var howie interface{}
            var books BookInfo
            if err = cursor.Decode(&books); err == nil {
                fmt.Printf("Find查詢到的數據:%v\n", books)
            }

            //howieArrayEmpty = append(howieArrayEmpty, howie)
        }
    } else {
        fmt.Println(err)
    }
}

func InsertTestData() {
    bi := BookInfo{}
    bi.ID = primitive.NewObjectID()
    bi.Name = "hello"
    bi.UserID = 3002
    reader := ReaderInfo{}
    reader.UserID = 30008
    reader.NickName = "停車坐愛楓林晚"
    bi.Reader = append(bi.Reader, reader)
    liker := ReaderInfo{}
    liker.UserID = 30008
    liker.NickName = "停車坐愛楓林晚"
    bi.Liker = append(bi.Liker, liker)
    bi.Tags = append(bi.Tags, "高數")
    bi.Tags = append(bi.Tags, "高等數學")
    page := PageInfo{}
    pb := ProBlockInfo{}
    pb.L = 20
    pb.T = 40
    pb.R = 220
    pb.B = 200
    page.ProBlock = append(page.ProBlock, pb)
    page.BPic = append(page.BPic, "http://www.pic98.com/abc.png")
    bi.Pages = append(bi.Pages, page)

    r, err := cctn.InsertOne(context.Background(), bi)
    fmt.Println(r, err)

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章