Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mencipta model mongo dan pelanggan dengan betul?

Bagaimana untuk mencipta model mongo dan pelanggan dengan betul?

PHPz
PHPzke hadapan
2024-02-09 08:30:101134semak imbas

Bagaimana untuk mencipta model mongo dan pelanggan dengan betul?

Editor PHP Apple akan memperkenalkan anda cara membuat model dan pelanggan mongo dengan betul. Apabila membangun dengan MongoDB, mencipta model dan pelanggan adalah langkah yang sangat penting, kerana ia menentukan fleksibiliti dan kecekapan anda dalam operasi seterusnya. Pertama, anda perlu mendayakan sokongan MongoDB dengan memasang sambungan MongoDB. Anda kemudiannya boleh menggunakan API yang disediakan oleh MongoDB untuk mencipta model dan pelanggan. Apabila mencipta model, anda perlu menentukan maklumat yang berkaitan seperti nama koleksi, medan dan indeks. Apabila membuat klien, anda perlu menentukan maklumat sambungan MongoDB, seperti nama hos, nombor port dan maklumat pengesahan. Dengan mencipta model dan pelanggan dengan betul, anda akan dapat mengendalikan pangkalan data MongoDB dengan lebih baik dan meningkatkan kecekapan pembangunan dan kualiti kod.

Kandungan soalan

Saya ada model yang saya nak selit dan baca dari mongodb:

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"`
}

Saya mahu medan ID ditambah secara automatik di dalam mongo, jadi saya biarkan medan ID kosong:

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

Selain itu, apabila mencipta repositori saya melakukan ini:

// 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
}

Boleh beritahu saya apa salah saya? Saya tidak begitu memahami cara menggunakan medan _id dengan betul dalam mongo db. Saya mahu ia dicipta dan dikendalikan di dalam mongo

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

Penyelesaian

Jika tidak diluluskan, MongoDB akan menjana ID. Dalam struktur anda, ID yang anda masukkan semuanya adalah sifar.

Anda boleh melakukan dua perkara:

Anda boleh menjananya sendiri:

feedback := model.NewTripFeedback(
        ID: primitive.NewObjectID(),
        createRequest.UserID,

Atau, anda tidak lulus dalam:

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

Kemudian, jika ID tidak dimulakan, ID akan dijana.

Atas ialah kandungan terperinci Bagaimana untuk mencipta model mongo dan pelanggan dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Warisan dalam GoArtikel seterusnya:Warisan dalam Go