Bagaimana untuk mencipta model mongo dan pelanggan dengan betul?

PHPz
Lepaskan: 2024-02-09 08:30:10
ke hadapan
1108 orang telah melayarinya

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"`
}
Salin selepas log masuk

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)
Salin selepas log masuk

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
}
Salin selepas log masuk

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') }]"
Salin selepas log masuk

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,
Salin selepas log masuk

Atau, anda tidak lulus dalam:

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

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!