GO mongodb操作

GO mongodb

1-封装单例连接

package driver

import (
	"context"

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

)

// MongoConnMgr mongodb连接管理
type MongoConnMgr struct {
	Database *mongo.Database
}

// mongodb mongo连接管理实例
var mongodb *MongoConnMgr

// GetMongoDB 单例
func GetMongoDB() *MongoConnMgr {
	if mongodb == nil {
		mongodb = newMongoConnMgr()
	}

	return mongodb
}

func newMongoConnMgr() *MongoConnMgr {
	m := &MongoConnMgr{}

	client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://10.53.3.160:27017"))  // 连接url
	if err != nil {
		panic(err)
	}

	if err := client.Ping(nil, readpref.Primary()); err != nil {
		panic(err)
	}

	logger.LogTemp("successfully connected to mongo: %s", "mongodb://10.53.3.160:27017")

	m.Database = client.Database("test")  // 数据库

	return m
}

2-使用测试

1.调用客户端

m := GetMongoDB()  // 获取mongo客户端
coll := m.Database.Collection("mm")  // 连接数据库,使用collection(数据表)

2.增查改删

// 定义结构体
type CurlInfo struct {
	DNS float64 `json:"NAMELOOKUP_TIME"` //NAMELOOKUP_TIME
	TCP float64 `json:"CONNECT_TIME"`    //CONNECT_TIME - DNS
	SSL float64 `json:"APPCONNECT_TIME"` //APPCONNECT_TIME - CONNECT_TIME
}

type ConnectData struct {
	Latency  float64  `json:"latency"`
	RespCode int      `json:"respCode"`
	Url      string   `json:"url"`
	Detail   CurlInfo `json:"details"`
}
type Sensor struct {
	ISP       string
	ClientUtc int64
	DataByAPP map[string]ConnectData
}

// 创建数据
apps := make(map[string]ConnectData)  // 定义map
apps["app1"] = ConnectData{
	Latency:  30.983999967575,
	RespCode: 200,
	Url:      "",
	Detail: CurlInfo{
		DNS: 5.983999967575,
		TCP: 10.983999967575,
		SSL: 15.983999967575,
	},
}
record := &Sensor{
	ClientUtc: time.Now().UTC().Unix(),
	ISP:       "China Mobile",
	DataByAPP: apps,
}
/*
数据格式
{
	"ISP": "China Mobile",
	"ClientUtc": 1625481988,
	"DataByAPP": {
		"app1": {
			"latency": 30.983999967575,
			"respCode": 200,
			"url": "",
			"details": {
				"NAMELOOKUP_TIME": 5.983999967575,
				"CONNECT_TIME": 10.983999967575,
				"APPCONNECT_TIME": 15.983999967575
			}
		}
	}
}
*/

// 插入数据
Add(coll, record)  
func Add(coll *mongo.Collection, data interface{}) {
	coll.InsertOne(context.TODO(), data)
}

// 查询数据
query := bson.D{
	{"isp", "China Mobile"},
}
findData := Find(coll, query)  // 查
fmt.Println(findData)
func Find(coll *mongo.Collection, query interface{}) []*Sensor {
	// 查询单条数据
	//var data Sensor
	//err := coll.FindOne(context.TODO(), query).Decode(&data)

	// 查询多条数据
	var data []*Sensor
	cur, err := coll.Find(context.TODO(), query)
	if err != nil {
		fmt.Println(err)
	}
	cur.All(context.TODO(), &data)
	return data
}

// 更新数据
query = bson.D{
		{"isp", "China Mobile"},
}
data := bson.M{
	"$set": bson.M{
		"clientutc": 1625476899,
	},
}
Update(coll, query, data)
func Update(coll *mongo.Collection, query interface{}, data interface{}) {
	//coll.UpdateOne(context.TODO(), query, data)  // 更新单个数据
	coll.UpdateMany(context.TODO(), query, data)  // 更新多个数据
}

// 删除数据
query = bson.D{
	{"isp", "China Mobile"},
}
Delete(coll, query)
func Delete(coll *mongo.Collection, query interface{}) {
	//coll.DeleteOne(context.TODO(), query)  // 删除单个数据
	coll.DeleteMany(context.TODO(), query)  // 删除多个数据
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值