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 }
UserService の作成方法に関するコードが提供されていません。
理想的には、次のようなインターフェイスが必要です:
リーリーその後、UserService は次のように作成されます:
リーリー そして、2 つの別個のリポジトリがあり、両方とも UserRepository
インターフェイスを実装します。つまり、インターフェイスと同じ名前と同じシグネチャ (パラメーター、戻り値の型) を持つメソッドが必要です。
mongo_user_repository.go
リーリーpostgres_user_repository.go
リーリー以下の (非常に悪い) 例のように、ユースケースに応じてこれらのいずれかを渡すことができます。
main.goリーリー
以上がPostgres と MongoDB を使用した CRUD?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。