博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go 操作mongodb
阅读量:6819 次
发布时间:2019-06-26

本文共 3829 字,大约阅读时间需要 12 分钟。

package masterimport (	"context"	"fmt"	"go.mongodb.org/mongo-driver/mongo"	"go.mongodb.org/mongo-driver/mongo/options"	"gopkg.in/mgo.v2/bson"	"time")type Users struct {	Name string `bson:"name"`	Age int `bson:"age"`	Interest []string `bson:"interest"`}type LogMgr struct {	client *mongo.Client	collection *mongo.Collection}var (	G_logMgr *LogMgr)func InItMongodb()  {	var(		ctx context.Context		opts *options.ClientOptions		client *mongo.Client		err error		collection *mongo.Collection	)	// 连接数据库	ctx, _ = context.WithTimeout(context.Background(), time.Duration(G_config.MongodbConnectTimeout) * time.Millisecond)  // ctx	opts = options.Client().ApplyURI(G_config.MongodbUri)  // opts	if client, err = mongo.Connect(ctx,opts); err != nil{		fmt.Println(err)		return	}	//链接数据库和表	collection = client.Database("mygood").Collection("mytest")	//赋值单例	G_logMgr = &LogMgr{		client:client,		collection:collection,	}	//G_logMgr.SaveMongodb()	//G_logMgr.UpdateMongo()	//G_logMgr.SelectMongodb()	//G_logMgr.DeleteMongo()}//保存数据func (logMgr *LogMgr)SaveMongodb() (err error) {	var(		insetRest *mongo.InsertOneResult		id interface{}		users []interface{}		insertManRest *mongo.InsertManyResult	)	//TODO: 单个写入	//userId := bson.NewObjectId().String()	user := Users{
"liulong", 23, []string{
"爬山", "敲代码"}} if insetRest, err = logMgr.collection.InsertOne(context.TODO(), &user); err != nil{ fmt.Println(err) return } id = insetRest.InsertedID fmt.Println(id) //TODO: 批量写入 users = append(users, &Users{Name:"zhangsan", Age:25}, &Users{Name:"lisi", Age:33}, &Users{Name:"wangwu", Age:66}) if insertManRest, err = logMgr.collection.InsertMany(context.TODO(), users); err != nil{ fmt.Println(err) return } for _, v := range insertManRest.InsertedIDs{ fmt.Println(v) } return}//查询数据func (logMgr *LogMgr)SelectMongodb() (err error) { var( cur *mongo.Cursor user *Users ctx context.Context ) ctx = context.TODO() //TODO: 单个查询 //if err = logMgr.collection.FindOne(ctx, bson.D{
{"name", "liulong"}}).Decode(&user); err != nil{
// fmt.Println(err) // return //} //logMgr.collection.FindOne(ctx, bson.M{"name":"liulong", "age": 23}).Decode(&user) //if cur, err = logMgr.collection.Find(ctx, bson.D{
{"name", "liulong"}, {"age", 23}}); err !=nil{
// fmt.Println("此处错误", err) // return //} if err = logMgr.collection.FindOne(ctx, bson.M{
"name":"liulong"}).Decode(&user); err != nil{ fmt.Println(err) return } fmt.Println(user) //TODO:多个查询; 查找age>=25的,只显示3个,从大到小排序 if cur, err = logMgr.collection.Find(ctx, bson.M{
"age":bson.M{
"$gte":25}}, options.Find().SetLimit(3), options.Find().SetSort(bson.M{
"age":-1})); err != nil{ fmt.Println(err) return } defer cur.Close(ctx) // for cur.Next(ctx){ //TODO: 第一种解析方法,解析后是结构体 user = &Users{} if err = cur.Decode(user); err != nil{ fmt.Println(err) } fmt.Println(user) // //TODO: 第二种解析方法,解析后是map var result bson.M if err = cur.Decode(&result); err != nil{ fmt.Println(err) } fmt.Println(result["_id"], result) } return}//更新数据func (logMgr *LogMgr)UpdateMongo() (err error) { var( ctx context.Context updateRet *mongo.UpdateResult ) //更新name是liulong33的用户,没有就创建 //logMgr.collection.UpdateOne(ctx, bson.M{"name": "liulong33"}, bson.M{"$set": bson.M{"age": 78}}, options.Update().SetUpsert(true)) if updateRet, err = logMgr.collection.UpdateOne(ctx, bson.M{
"name": "liulong33"}, bson.M{
"$set": bson.M{
"age": 78}}); err != nil{ fmt.Println(err) return } fmt.Println("更新的个数", updateRet.ModifiedCount) return}//删除数据func (logMgr *LogMgr)DeleteMongo()(err error) { var( ctx context.Context delRet *mongo.DeleteResult ) if delRet, err = logMgr.collection.DeleteMany(ctx, bson.M{
"age":bson.M{
"$gte":10}}); err != nil{ fmt.Println(err) return } fmt.Println(delRet.DeletedCount) return}复制代码

转载于:https://juejin.im/post/5d009ba1f265da1b8e7097f1

你可能感兴趣的文章
想在vue、react中用es6,先知道这些必会的才行
查看>>
AJAX多级下拉联动【JSON方式】
查看>>
SQL更新错误JDBC batch update constraint [null]
查看>>
看图轻松理解数据结构与算法系列(希尔排序)
查看>>
【需求解决系列之一】移动卡片实现答题功能
查看>>
最全的Android 颜色透明度
查看>>
Spring Boot中使用WebSocket总结(三):使用消息队列实现分布式WebSocket
查看>>
世界上最贵的几幅画(纯属扯淡)
查看>>
iOS 面向协议封装全屏旋转功能
查看>>
js难点精解-----原型和原型链的关系和应用
查看>>
Framework 源码解析知识梳理(6) ContentProvider 源码解析
查看>>
函数式编程 - 玩转高阶回调函数
查看>>
从零实现Vue的组件库(五)- Breadcrumb 实现
查看>>
狙杀页面卡顿 —— Performance 指北
查看>>
客户端C++与前端js交互
查看>>
即时通讯框架T-io之WebSocket协议再之HelloWorld
查看>>
支付宝首页刷新的实现方案
查看>>
从实现后台商品属性代码说起,聊聊相关的思维!JS、模拟数据、桥梁
查看>>
zookeeper 高可用集群搭建
查看>>
JavaScript基础——深入学习async/await
查看>>