>  기사  >  백엔드 개발  >  Postgres 및 MongoDB를 사용한 CRUD?

Postgres 및 MongoDB를 사용한 CRUD?

WBOY
WBOY앞으로
2024-02-09 14:00:10731검색

使用 Postgres 和 MongoDB 进行 CRUD?

php 편집기 Xigua는 이 기사에서 Postgres와 MongoDB를 사용하여 CRUD 작업을 수행하는 방법을 알려줄 것입니다. Postgres는 관계형 데이터베이스인 반면 MongoDB는 문서 데이터베이스입니다. CRUD 작업은 데이터를 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)하는 프로세스를 의미합니다. 서로 다른 두 가지 유형의 데이터베이스를 결합하면 서로 다른 요구 사항을 기반으로 데이터 작업에 가장 적합한 데이터베이스를 선택하여 효율성과 유연성을 향상시킬 수 있습니다. 다음으로 CRUD 작업에서 이 두 데이터베이스의 적용을 살펴보겠습니다!

질문 내용

저는 Go와 백엔드를 처음 접하고 Go 인턴십 프로그램에 참여하고 있습니다. 우리는 psql 데이터베이스에 연결하는 CRUD를 구축했으며 이제 개발에 사용할 mongoDB에 연결하고 프로덕션에 PSQL을 사용하라는 메시지를 받았습니다. 처음부터 mongo에 대한 새 핸들러를 생성해야 합니까, 아니면 동일한 핸들러를 사용하여 어떻게든 사용 중인 데이터베이스 유형을 결정하고 이에 따라 로직을 사용할 수 있습니까? 예를 들어, 사용자 등록 엔드포인트에 대한 핸들러가 있습니다:

으아악

mongo에 대한 삽입, 등록 및 CheckIfEmailExists 기능을 구축했습니다.

func (ctrl *UserController) Register(c *gin.Context) {
    var user models.User
    if err := c.BindJSON(&user); err != nil {
        c.AbortWithStatusJSON(http.StatusUnprocessableEntity, gin.H{
            "error":   true,
            "message": err.Error(),
        })
        return
    }
    err := ctrl.userService.Register(&user)
    if err != nil {
        c.AbortWithStatusJSON(http.StatusUnprocessableEntity, gin.H{
            "error":   true,
            "message": err.Error(),
        })
        return
    }

    c.JSON(http.StatusCreated, gin.H{
        "message": "successfully created an user",
    })
}

func (svc *UserService) Register(user *models.User) error {
    if svc.userRepo.CheckIfEmailExists(user.Email) {
        return errors.New("user already registered")
    }
    hash, err := svc.generatePasswordHash(user.Password)
    if err != nil {
        return errors.New("err can't register user")
    }

    user.Password = hash

    return svc.userRepo.Insert(user)
}

func (repo *UserRepository) CheckIfEmailExists(mail string) bool {
    var user models.User
    err := repo.dbClient.Debug().Model(models.User{}).Where("email = ?", mail).Find(&user).Error
    return errors.Is(err, gorm.ErrRecordNotFound)
}

func (repo *UserRepository) Insert(user *models.User) error {
    err := repo.dbClient.Debug().Model(models.User{}).Create(user).Error
    if err != nil {
        log.Printf("failed to insert user: %v\n", err)
        return err
    }
    return nil
}

해결 방법

UserService를 생성하는 방법에 대한 코드를 제공하지 않았습니다.

이상적으로는 다음과 같은 인터페이스가 있어야 합니다.

으아악

그러면 UserService는 다음과 같이 생성되어야 합니다:

으아악

그리고 두 개의 별도 저장소가 있으며 둘 다 UserRepository 인터페이스를 구현합니다. 즉, 인터페이스와 동일한 이름과 서명(매개변수, 반환 유형)을 가진 메소드가 있어야 합니다.

mongo_user_repository.go

으아악

postgres_user_repository.go

으아악

아래의 (매우 나쁜) 예처럼 사용 사례에 따라 이들 중 하나를 전달할 수 있습니다.

main.go

으아악

위 내용은 Postgres 및 MongoDB를 사용한 CRUD?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제