前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang 与mongodb的交互。嵌套struct

Golang 与mongodb的交互。嵌套struct

作者头像
xiny120
发布2019-07-17 20:30:16
4.6K0
发布2019-07-17 20:30:16
举报
文章被收录于专栏:毛毛v5毛毛v5

mongodb这类nosql数据库,还是先定义结构比较好啊。存取方便。蛋疼的是golang定义个嵌套的struct好费劲啊。。 primitive.NewObjectID() 可以生成一个mongodb的_id,找了半天这个函数。网上都是 mgo的函数。好像好久不更新了。mongo-driver是mongodb的官方驱动?所以不用第三方的了吧。

代码语言:javascript
复制
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)

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档