Golang 与mongodb的交互。嵌套struct

毛毛v5 · · 2183 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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)

}


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:毛毛v5

查看原文:Golang 与mongodb的交互。嵌套struct

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2183 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传