Wie erstelle ich ein Mongo-Modell und einen Client richtig?

PHPz
Freigeben: 2024-02-09 08:30:10
nach vorne
1108 Leute haben es durchsucht

Wie erstelle ich ein Mongo-Modell und einen Client richtig?

PHP-Editor Apple stellt Ihnen vor, wie Sie Mongo-Modelle und -Clients richtig erstellen. Bei der Entwicklung mit MongoDB ist die Erstellung von Modellen und Clients ein sehr wichtiger Schritt, da sie Ihre Flexibilität und Effizienz im späteren Betrieb bestimmen. Zunächst müssen Sie die MongoDB-Unterstützung aktivieren, indem Sie die MongoDB-Erweiterung installieren. Anschließend können Sie die von MongoDB bereitgestellte API verwenden, um Modelle und Clients zu erstellen. Beim Erstellen eines Modells müssen Sie relevante Informationen wie Sammlungsnamen, Felder und Indizes definieren. Beim Erstellen eines Clients müssen Sie MongoDB-Verbindungsinformationen angeben, z. B. Hostnamen, Portnummer und Authentifizierungsinformationen. Durch die korrekte Erstellung von Modellen und Clients können Sie die MongoDB-Datenbank besser betreiben und die Entwicklungseffizienz und Codequalität verbessern.

Frageninhalt

Ich habe ein Modell, das ich einfügen und aus mongodb lesen möchte:

type TripFeedback struct {
    ID        primitive.ObjectID `json:"_id" bson:"_id"`
    UserID    string             `json:"user_id" bson:"user_id"`
    WaybillID uint64             `json:"waybill_id" bson:"waybill_id"`
    Rating    Rating             `json:"rating" bson:"rating"`
    Comment   string             `json:"comment" bson:"comment"`
    CreatedAt time.Time          `json:"created_at" bson:"created_at"`
}
Nach dem Login kopieren

Ich möchte, dass das ID-Feld in Mongo automatisch erhöht wird, also lasse ich das ID-Feld leer:

feedback := model.NewTripFeedback(
        createRequest.UserID,
        createRequest.WaybillID,
        rating,
        createRequest.Comment,
        createRequest.ReceivedAt,
    )
    _, err = r.collection.Create(ctx, feedback)
Nach dem Login kopieren

Außerdem mache ich beim Erstellen des Repositorys Folgendes:

// NewFeedbackRepository connects to mongo db and feedback collection.
func NewFeedbackRepository(ctx context.Context, client *mongo.Client) (*FeedbacksRepository, error) {
    r := FeedbacksRepository{
        c:       client.Database(dbName).Collection(feedbackCollectionName),
        metrics: NewMetrics(),
    }
    if err := r.migrate(ctx); err != nil {
        return nil, err
    }
    return &r, nil
}

// migrate ensures presence of dossier collection in database.
func (r *FeedbacksRepository) migrate(ctx context.Context) error {
    mdb := r.c.Database()
    cs, lcErr := mdb.ListCollectionNames(ctx, bson.M{"name": feedbackCollectionName})
    if lcErr != nil {
        return fmt.Errorf("migrate: list collections error: %w", lcErr)
    }
    if len(cs) == 0 {
        if err := mdb.CreateCollection(ctx, feedbackCollectionName); err != nil {
            return fmt.Errorf("migrate: create collection error: %w", err)
        }
    }
    return nil
}
Nach dem Login kopieren

Kannst du mir sagen, was ich falsch gemacht habe? Ich habe nicht wirklich verstanden, wie man das _id-Feld in Mongo DB richtig verwendet. Ich möchte, dass es in Mongo erstellt und verarbeitet wird

write errors
: [E11000 duplicate key error collection: drive.feedback index: _id_ dup key: { _id: ObjectId('000000000000000000000000') }]"
Nach dem Login kopieren

Workaround

Wenn nicht übergeben, generiert MongoDB die ID. In Ihrer Struktur sind die von Ihnen übergebenen IDs alle Nullen.

Sie können zwei Dinge tun:

Sie können es selbst generieren:

feedback := model.NewTripFeedback(
        ID: primitive.NewObjectID(),
        createRequest.UserID,
Nach dem Login kopieren

Oder Sie haben es nicht weitergegeben:

type TripFeedback struct {
    ID        *primitive.ObjectID `json:"_id" bson:"_id,omitempty"`
    UserID    string             `json:"user_id" bson:"user_id"`
    ...
Nach dem Login kopieren

Wenn die ID dann nicht initialisiert ist, wird die ID generiert.

Das obige ist der detaillierte Inhalt vonWie erstelle ich ein Mongo-Modell und einen Client richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!