mongodb 统一接口封装(golang版本)
root@jack-VirtualBox:~/mongodb/mongod# cat db/student.go
package db
import (
"context"
"fmt"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type Student struct {
Id int32 `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
Height int `json:"height"`
Weight int `json:"weight"`
}
// GetList 获取全量的数据
func (s *Student) GetList(filter interface{}, objs interface{}) error {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return err
}
cur, err := collection.Find(context.Background(), filter)
if err != nil {
fmt.Println(err)
return err
}
if err := cur.Err(); err != nil {
fmt.Println(err)
return err
}
err = cur.All(context.Background(), &objs)
if err != nil {
fmt.Println(err)
return err
}
cur.Close(context.Background())
log.Println("collection.Find curl.All: ", objs)
return nil
}
// AddOne 新增一条数据
func (s *Student) AddOne() (*mongo.InsertOneResult, error) {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return nil, err
}
objId, err := collection.InsertOne(context.TODO(), *s)
if err != nil {
log.Println(err)
return nil, err
}
log.Println("录入数据成功,objId:", objId)
return objId, nil
}
// EditOne 编辑一条数据
func (s *Student) EditOne(filter interface{}) error {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return err
}
update := bson.M{"$set": s}
updateResult, err := collection.UpdateOne(context.Background(), filter, update)
if err != nil {
fmt.Println(err)
return err
}
log.Println("collection.UpdateOne:", updateResult)
return nil
}
// 更新数据 - 存在更新,不存在就新增
func (s *Student) Update(filter interface{}) error {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return err
}
update := bson.M{"$set": s}
updateOpts := options.Update().SetUpsert(true)
updateResult, err := collection.UpdateOne(context.Background(), filter, update, updateOpts)
if err != nil {
fmt.Println(err)
}
log.Println("collection.UpdateOne:", updateResult)
return nil
}
// 删除一条匹配的数据
func (s *Student) Del(filter interface{}) (*mongo.DeleteResult, error) {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return nil, err
}
deleteResult, err := collection.DeleteOne(context.Background(), filter)
if err != nil {
fmt.Println(err)
return nil, err
}
fmt.Println("collection.DeleteOne:", deleteResult)
return deleteResult, nil
}
// 删除全部匹配的数据
func (s *Student) DelAll(filter interface{}) (*mongo.DeleteResult, error) {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return nil, err
}
deleteResult, err := collection.DeleteMany(context.Background(), filter)
if err != nil {
fmt.Println(err)
return nil, err
}
log.Println("collection.DeleteOne:", deleteResult)
return deleteResult, nil
}
// 删除整个文档
func (s *Student) DelTable() error {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return nil
}
err = collection.Drop(context.Background())
if err != nil {
fmt.Println(err)
}
return nil
}
// Sectle 模糊查询
// bson.M{"name": primitive.Regex{Pattern: "深入"}}
func (s *Student) Sectle(filter interface{}, objs interface{}) error {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return err
}
cur, err := collection.Find(context.Background(), filter)
if err != nil {
fmt.Println(err)
return err
}
if err := cur.Err(); err != nil {
fmt.Println(err)
}
ss := []Student{}
for cur.Next(context.Background()) {
var s Student
if err = cur.Decode(&s); err != nil {
fmt.Println(err)
}
//log.Println("collection.Find name=primitive.Regex{xx}: ", s)
ss = append(ss, s)
}
cur.Close(context.Background())
objs = ss
return nil
}
// 统计collection的数据总数
func (s *Student) Count(filter interface{}) (int, error) {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return 0, err
}
count, err := collection.CountDocuments(context.Background(), filter)
if err != nil {
fmt.Println(count)
}
log.Println("collection.CountDocuments:", count)
return int(count), nil
}
// 准确搜索一条数据
func (s *Student) GetOne(filter interface{}) error {
collection, err := Get_collecton(TBL_STUDENT_NAME)
if err != nil {
return err
}
err = collection.FindOne(context.Background(), filter).Decode(s)
if err != nil {
fmt.Println(err)
return err
}
log.Println("collection.FindOne: ", s)
return nil
}
root@jack-VirtualBox:~/mongodb/mongod#