Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Backend-Entwicklung Golang CRUD mit Postgres und MongoDB?

CRUD mit Postgres und MongoDB?

Feb 09, 2024 pm 02:00 PM
用户注册

使用 Postgres 和 MongoDB 进行 CRUD?

php-Editor Xigua zeigt Ihnen in diesem Artikel, wie Sie Postgres und MongoDB verwenden, um CRUD-Operationen durchzuführen. Postgres ist eine relationale Datenbank, während MongoDB eine Dokumentendatenbank ist. CRUD-Operationen beziehen sich auf den Prozess des Erstellens (Create), Lesens (Read), Aktualisierens (Update) und Löschens (Delete) von Daten. Durch die Kombination dieser beiden unterschiedlichen Datenbanktypen können Sie basierend auf unterschiedlichen Anforderungen die am besten geeignete Datenbank für Datenoperationen auswählen, um die Effizienz und Flexibilität zu verbessern. Lassen Sie uns als Nächstes die Anwendung dieser beiden Datenbanken in CRUD-Operationen untersuchen!

Frageninhalt

Ich bin ziemlich neu in Go und Backends und nehme am Go-Praktikumsprogramm teil. Wir haben ein CRUD erstellt, das eine Verbindung zu einer psql-Datenbank herstellt, und jetzt wird mir gesagt, ich solle eine Verbindung zu mongoDB herstellen, das wir für die Entwicklung und PSQL für die Produktion verwenden werden. Muss ich einen neuen Handler für Mongo von Grund auf erstellen oder kann ich denselben Handler verwenden und irgendwie den Typ der verwendeten Datenbank bestimmen und die Logik entsprechend verwenden? Ich habe zum Beispiel einen Handler für den Benutzerregistrierungsendpunkt:

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
}
Nach dem Login kopieren

Ich habe die Funktionen insert, register und CheckIfEmailExists für Mongo erstellt:

func (repo *UserRepository) InsertInMongo(user *models.UserB) error {
    coll := repo.mongoClient.DB.Collection("users")
    _, err := coll.InsertOne(context.TODO(), user)
    if err != nil {
        log.Printf("failed to insert user: %v\n", err)
        return err
    }
    return nil
}

func (svc *UserService) RegisterToMongo(user *models.UserB) error {
    check := svc.userRepo.CheckIfEmailExistsInMongo(user.Email)
    if check {
        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.InsertInMongo(user)
}

func (repo *UserRepository) CheckIfEmailExistsInMongo(email string) bool {
    coll := repo.mongoClient.Collection
    filter := bson.D{{Key: "email", Value: email}}

    count, err := coll.CountDocuments(context.TODO(), filter)
    if err != nil {
        panic(err)
    }
    if count != 0 {
        return true
    }
    return false
}
Nach dem Login kopieren

Workaround

Sie haben keinen Code zum Erstellen eines UserService bereitgestellt.

Idealerweise sollten Sie eine Schnittstelle haben, die so aussieht:

type UserRepository interface {
    CheckIfEmailExists(mail string) bool
    Insert(user *models.User) error
    …
}
Nach dem Login kopieren

Dann sollte der UserService wie folgt erstellt werden:

// We use the interface as param
func NewUserService(userRepo UserRepository) UserService {
    return UserService{
        UserRepo: userRepo
    }
}
Nach dem Login kopieren

Und Sie haben zwei separate Repositorys, die beide die UserRepository-Schnittstelle implementieren – das heißt, sie sollten Methoden mit demselben Namen und derselben Signatur (Parameter, Rückgabetyp) wie die Schnittstelle haben:

mongo_user_repository.go

Type MongoUserRepo struct {
    …
}

func (repo MongoUserRepo) CheckIfEmailExists(mail string) bool {
  … some mongo logic here
}

func (repo MongoUserRepo) Insert(user *models.User) error {
  … some mongo logic here
}
Nach dem Login kopieren

postgres_user_repository.go

type PostgresUserRepo struct {
    …
}

func (repo PostgresUserRepo) CheckIfEmailExists(mail string) bool {
  … some postgres logic here
}

func (repo PostgresUserRepo) Insert(user *models.User) error {
  … some postgres logic here
}
Nach dem Login kopieren

Sie können je nach Anwendungsfall jedes davon weitergeben, wie das (sehr schlechte) Beispiel unten:

main.go

…

var userService UserService

if os.Getenv(“environment”) == “prod” {
    userService = NewUserService(postgreUserRepo)
} else if os.Getenv(“environment”) == “dev” {
    userService = NewUserService(mongoUserRepo)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonCRUD mit Postgres und MongoDB?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So registrieren Sie die E-Mail-Adresse der Eisenbahn 12306 So registrieren Sie die E-Mail-Adresse der Eisenbahn 12306 Apr 30, 2024 am 11:33 AM

Die Schritte zum Registrieren der Railway 12306-E-Mail-Adresse sind wie folgt: Besuchen Sie die 12306-Website und klicken Sie auf „Registrieren“. Wählen Sie „E-Mail-Registrierung“ und geben Sie die E-Mail-Adresse, den Namen, die Mobiltelefonnummer und andere Informationen ein Geben Sie in den Eingabeaufforderungen den E-Mail-Bestätigungscode und den Mobiltelefon-Bestätigungscode ein und klicken Sie auf „Registrierung abschließen“.

Warum kann ich mich nicht bei der Bitget Wallet-Börse registrieren? Warum kann ich mich nicht bei der Bitget Wallet-Börse registrieren? Sep 06, 2024 pm 03:34 PM

Es gibt verschiedene Gründe dafür, dass Sie sich nicht für die BitgetWallet-Börse registrieren können, darunter Kontobeschränkungen, nicht unterstützte Regionen, Netzwerkprobleme, Systemwartung und technische Ausfälle. Um sich für die BitgetWallet-Börse zu registrieren, besuchen Sie bitte die offizielle Website, geben Sie die Informationen ein, stimmen Sie den Bedingungen zu, schließen Sie die Registrierung ab und bestätigen Sie Ihre Identität.

Gate.io Open Sesame Tutorial zur Registrierung und Aufladung neuer Benutzer Gate.io Open Sesame Tutorial zur Registrierung und Aufladung neuer Benutzer Apr 25, 2024 pm 04:53 PM

So registrieren Sie Ihr Gate.io-Konto und laden es auf: 1. Besuchen Sie die offizielle Website von Gate.io und klicken Sie auf „Registrieren“. 2. Wählen Sie die Registrierungsmethode (E-Mail oder Mobiltelefon), legen Sie ein Passwort fest und stimmen Sie den Bedingungen zu. 3. Melden Sie sich bei Ihrem Konto an und klicken Sie auf „Aufladen“. 4. Wählen Sie die gesetzliche Währung oder Kryptowährung zum Aufladen aus, geben Sie den Betrag ein und wählen Sie die Auflademethode aus. 5. Erhalten Sie die Aufladeadresse und überweisen Sie Geld von externen Geldbörsen oder Börsen.

Warum hat Douyin zwei Konten? Wie installiere ich zwei TikToks auf einem Mobiltelefon? Warum hat Douyin zwei Konten? Wie installiere ich zwei TikToks auf einem Mobiltelefon? May 06, 2024 pm 09:28 PM

Im digitalen Zeitalter sind soziale Medien zu einem festen Bestandteil des Lebens der Menschen geworden. Douyin hat als eine der beliebtesten Kurzvideoplattformen in China eine große Anzahl von Nutzern angezogen. Einige Benutzer haben sogar zwei Konten registriert. Warum hat Douyin also zwei Konten? Dieser Artikel beantwortet diese Frage für Sie und erklärt, wie Sie zwei Douyin-Konten auf Ihrem Telefon installieren. 1. Warum hat Douyin zwei Konten? Funktionale Differenzierung: Einige Benutzer unterscheiden Konten nach Inhaltstyp oder Funktion. Beispielsweise wird ein Konto verwendet, um das tägliche Leben zu teilen, und ein anderes Konto wird verwendet, um berufliche Fähigkeiten zu demonstrieren. 2. Datenschutz: Einige Benutzer hoffen, ihre Privatsphäre durch zwei Konten zu schützen, Leben und Arbeit zu trennen und Informationslecks zu vermeiden. 3. Interaktionsbedarf: Einige Benutzer registrieren aufgrund von Interaktionsbedarf möglicherweise zwei

Wie schließe ich die Verknüpfung mehrerer Konten auf Douyin? Welche Rolle spielt die Kontoverknüpfung? Wie schließe ich die Verknüpfung mehrerer Konten auf Douyin? Welche Rolle spielt die Kontoverknüpfung? Apr 20, 2024 pm 05:58 PM

Douyin ist heutzutage die beliebteste Plattform für Kurzvideos und lockt unzählige Benutzer an, die sich registrieren und teilen möchten. Einige Benutzer registrieren möglicherweise mehrere Douyin-Konten für unterschiedliche Zwecke. Douyin ermöglicht Benutzern die Verknüpfung mehrerer Konten zur einfachen Verwaltung. Manchmal müssen Benutzer jedoch möglicherweise die Verknüpfung von Konten aufheben. Dieser Artikel konzentriert sich auf „So schließen Sie die Verknüpfung mehrerer Konten auf Douyin“ und stellt die Methode zum Schließen der Kontoverknüpfung und die Rolle der Kontoverknüpfung im Detail vor. 1. Wie schließe ich die Verknüpfung mehrerer Konten auf Douyin? 1. Öffnen Sie die Douyin-App und rufen Sie die persönliche Startseite „Ich“ auf. 2. Klicken Sie auf das „Drei-Streifen“-Symbol in der oberen rechten Ecke, um das Funktionsmenü zu öffnen. 3. Suchen Sie im Funktionsmenü die Option „Einstellungen“ und klicken Sie zum Aufrufen. 4. Suchen Sie auf der Einstellungsseite die Option „Konto und Sicherheit“ und klicken Sie zur Eingabe.

Ausländischer USDT-Austausch Ausländischer USDT-Austausch Apr 19, 2024 pm 04:01 PM

Übersee-USDT-Börsen sind im Ausland registrierte und betriebene Handelsplattformen für digitale Währungen, die hauptsächlich auf USDT basieren. Zu den Hauptmerkmalen gehören: Unterstützung für USDT-Transaktionen, globale Dienstleistungen, hohe Liquidität, Unterstützung mehrerer Währungen und legale Ein- und Auszahlungskanäle in Währungen. Wenn Sie sich für eine USDT-Börse im Ausland entscheiden, sollten Sie Sicherheit, Transaktionsgebühren, Währungsunterstützung, Ein- und Auszahlungen in Fiat-Währung sowie Kundendienst berücksichtigen. Zu den bekannten Börsen gehören Binance, Huobi, Oyi und Coinbase.

Wie lautet die detaillierte Erklärung von Douyins Regeln zum Ändern der Funkenfarbe? Verschiedene Funkenfarben erfüllen die Bedingungen Wie lautet die detaillierte Erklärung von Douyins Regeln zum Ändern der Funkenfarbe? Verschiedene Funkenfarben erfüllen die Bedingungen May 04, 2024 am 09:31 AM

Um die Benutzerinteraktion zu verbessern und das Benutzererlebnis zu verbessern, hat die Douyin-Plattform Spark eingeführt, einen interessanten interaktiven Mechanismus. Benutzer können ihre Funken durch eine Reihe von Aktionen auf Douyin aktivieren und verbessern. Verschiedene Farben repräsentieren unterschiedliche Erfolge und Auszeichnungen. Das Verständnis der Farbwechselregeln von Douyin Spark kann Benutzern helfen, besser teilzunehmen und zu interagieren und den sozialen Spaß von Douyin zu genießen. 1. Wie lauten die detaillierten Erklärungen zu Douyins Regeln zum Ändern der Funkenfarbe? 1. Verhalten aktiviert das interaktive Verhalten der Benutzer, wie etwa Likes, Kommentare, Shares usw., was Funken auslösen kann. 2. Levelverbesserung Wenn das interaktive Verhalten des Benutzers zunimmt, werden die Funken nach und nach aktualisiert und die Farbe ändert sich entsprechend. 3. Farbänderung Die Farbänderung von Funken hängt normalerweise mit der Interaktionshäufigkeit, der Interaktionsqualität und der Begeisterung des Benutzers für die Teilnahme an Aktivitäten zusammen. 4. Die Aufgabe ist abgeschlossen

Deepseek Official Website -Eingang und neueste Werbeaktivitäten Deepseek Official Website -Eingang und neueste Werbeaktivitäten Feb 19, 2025 pm 05:15 PM

Die offizielle Website von Deepseek startet jetzt mehrere Rabattaktivitäten, um den Benutzern ein Einkaufserlebnis zu bieten. Neue Benutzer melden sich an, um einen Gutschein in Höhe von 10 US -Dollar zu erhalten, und genießen einen begrenzten Zeitraum von 15% für das gesamte Publikum. Empfehlen Sie Freunde können auch Belohnungen verdienen, und Sie können Punkte für die Erlösung von Geschenken beim Einkaufen sammeln. Die Veranstaltungsfristen sind unterschiedlich.

See all articles