Postgres と MongoDB を使用した CRUD?

WBOY
リリース: 2024-02-09 14:00:10
転載
731 人が閲覧しました

使用 Postgres 和 MongoDB 进行 CRUD?

php 編集者の Xigua が、この記事を通じて CRUD 操作に Postgres と MongoDB を使用する方法を学習します。 Postgres はリレーショナル データベースであり、MongoDB はドキュメント データベースです。 CRUD 操作は、データの作成 (Create)、読み取り (Read)、更新 (Update)、および削除 (Delete) のプロセスを指します。これら 2 つの異なるタイプのデータベースを組み合わせることにより、さまざまなニーズに基づいてデータ操作に最適なデータベースを選択し、効率と柔軟性を向上させることができます。次に、CRUD 操作におけるこれら 2 つのデータベースのアプリケーションを見てみましょう。

質問内容

私は Go とバックエンドについてはかなり初心者で、Go インターンシップ プログラムに参加しています。 psql データベースに接続する CRUD を構築しましたが、今度は mongoDB に接続するように指示されます。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
}
ログイン後にコピー

Solution

UserService の作成方法に関するコードが提供されていません。

理想的には、次のようなインターフェイスが必要です:

リーリー

その後、UserService は次のように作成されます:

リーリー

そして、2 つの別個のリポジトリがあり、両方とも UserRepository インターフェイスを実装します。つまり、インターフェイスと同じ名前と同じシグネチャ (パラメーター、戻り値の型) を持つメソッドが必要です。

mongo_user_repository.go

リーリー

postgres_user_repository.go

リーリー

以下の (非常に悪い) 例のように、ユースケースに応じてこれらのいずれかを渡すことができます。

main.go

リーリー

以上がPostgres と MongoDB を使用した CRUD?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!