Categorygithub.com/ace-zhaoy/go-repository-mongo
modulepackage
1.0.2
Repository: https://github.com/ace-zhaoy/go-repository-mongo.git
Documentation: pkg.go.dev

# README

介绍

这是一个使用go.mongodb.org/mongo-driver/mongo作为驱动的 repository 库,支持 github.com/ace-zhaoy/go-repository 协议。

使用

go get github.com/ace-zhaoy/go-repository-mongo

快速使用

package main

import (
	"context"
	"fmt"
	"github.com/ace-zhaoy/errors"
	goid "github.com/ace-zhaoy/go-id"
	repositorymongo "github.com/ace-zhaoy/go-repository-mongo"
	"github.com/ace-zhaoy/go-repository/contract"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"log"
)

type User struct {
	ID   int64  `json:"id" bson:"_id"`
	Name string `json:"name" bson:"name"`
}

func (u *User) GetID() int64 {
	return u.ID
}

func (u *User) SetID(id int64) {
	u.ID = id
}

type UserRepository struct {
	contract.CrudRepository[int64, *User]
}

func NewUserRepository(db *mongo.Database) *UserRepository {
	return &UserRepository{
		CrudRepository: repositorymongo.NewCrudRepository[int64, *User](db.Collection("user")),
	}
}

func main() {
	defer errors.Recover(func(e error) { log.Fatalf("err: %+v\n", e) })
	userName := ""
	password := ""
	host := ""
	mongoURL := fmt.Sprintf("mongodb://%s:%s@%s", userName, password, host)
	client, err := mongo.Connect(context.Background(), options.Client().ApplyURI(mongoURL))
	errors.Check(err)
	userRepository := NewUserRepository(client.Database("test"))
	id, err := userRepository.Create(context.Background(), &User{
		ID:   goid.GenID(),
		Name: "test",
	})
	fmt.Printf("id = %d, err = %+v\n", id, err)
}

使用软删

增加 DeletedAt 属性即可

package main

import (
	"context"
	"fmt"
	"github.com/ace-zhaoy/errors"
	goid "github.com/ace-zhaoy/go-id"
	"github.com/ace-zhaoy/go-repository"
	repositorymongo "github.com/ace-zhaoy/go-repository-mongo"
	"github.com/ace-zhaoy/go-repository/contract"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"log"
)

type User struct {
	ID        int64  `json:"id" bson:"_id"`
	Name      string `json:"name" bson:"name"`
	DeletedAt int64  `json:"deleted_at" bson:"deleted_at"`
}

func (u *User) GetID() int64 {
	return u.ID
}

func (u *User) SetID(id int64) {
	u.ID = id
}

type UserRepository struct {
	contract.CrudRepository[int64, *User]
}

func NewUserRepository(db *mongo.Database) *UserRepository {
	return &UserRepository{
		CrudRepository: repositorymongo.NewCrudRepository[int64, *User](db.Collection("user")),
	}
}

func main() {
	defer errors.Recover(func(e error) { log.Fatalf("err: %+v\n", e) })
	userName := ""
	password := ""
	host := ""
	mongoURL := fmt.Sprintf("mongodb://%s:%s@%s", userName, password, host)
	ctx := context.Background()
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURL))
	errors.Check(err)
	userRepository := NewUserRepository(client.Database("test"))
	id, err := userRepository.Create(ctx, &User{
		ID:   goid.GenID(),
		Name: "test",
	})
	errors.Check(err)

	err = userRepository.DeleteByID(ctx, id)
	errors.Check(err)

	// 常规查找(无法找到被删除的数据)
	_, err = userRepository.FindByID(ctx, id)
	fmt.Println(errors.Is(err, repository.ErrNotFound))

	// 使用 Unscoped 查找(可以找到被删除的数据)
	user, err := userRepository.Unscoped().FindByID(ctx, id)
	errors.Check(err)
	fmt.Println(user.DeletedAt)
}

# Functions

No description provided by the author
No description provided by the author

# Structs

No description provided by the author