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"
)
type MongoConnMgr struct {
Database *mongo.Database
}
var mongodb *MongoConnMgr
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"))
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()
coll := m.Database.Collection("mm")
2.增查改删
type CurlInfo struct {
DNS float64 `json:"NAMELOOKUP_TIME"`
TCP float64 `json:"CONNECT_TIME"`
SSL float64 `json:"APPCONNECT_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)
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,
}
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
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.UpdateMany(context.TODO(), query, data)
}
query = bson.D{
{"isp", "China Mobile"},
}
Delete(coll, query)
func Delete(coll *mongo.Collection, query interface{}) {
coll.DeleteMany(context.TODO(), query)
}