Maison > développement back-end > Golang > le corps du texte

Comment créer correctement un modèle mongo et un client ?

PHPz
Libérer: 2024-02-09 08:30:10
avant
1108 Les gens l'ont consulté

Comment créer correctement un modèle mongo et un client ?

L'éditeur PHP Apple vous présentera comment créer correctement des modèles et des clients mongo. Lors du développement avec MongoDB, la création de modèles et de clients est une étape très importante, car ils déterminent votre flexibilité et votre efficacité dans les opérations ultérieures. Tout d'abord, vous devez activer la prise en charge de MongoDB en installant l'extension MongoDB. Vous pouvez ensuite utiliser l'API fournie par MongoDB pour créer des modèles et des clients. Lors de la création d'un modèle, vous devez définir des informations pertinentes telles que les noms de collections, les champs et les index. Lors de la création d'un client, vous devez spécifier les informations de connexion MongoDB, telles que le nom d'hôte, le numéro de port et les informations d'authentification. En créant correctement des modèles et des clients, vous serez en mesure de mieux exploiter la base de données MongoDB et d'améliorer l'efficacité du développement et la qualité du code.

Contenu de la question

J'ai un modèle que je souhaite insérer et lire depuis 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"`
}
Copier après la connexion

Je veux que le champ ID soit auto-incrémenté dans mongo, donc je laisse le champ ID vide :

feedback := model.NewTripFeedback(
        createRequest.UserID,
        createRequest.WaybillID,
        rating,
        createRequest.Comment,
        createRequest.ReceivedAt,
    )
    _, err = r.collection.Create(ctx, feedback)
Copier après la connexion

De plus, lors de la création du référentiel, je fais ceci :

// 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
}
Copier après la connexion

Pouvez-vous me dire ce que j'ai fait de mal ? Je n'ai pas vraiment compris comment utiliser correctement le champ _id dans la base de données mongo. Je veux qu'il soit créé et géré à l'intérieur de mongo

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

Solution de contournement

S'il n'est pas transmis, MongoDB générera l'ID. Dans votre structure, les identifiants que vous transmettez sont tous des zéros.

Vous pouvez faire deux choses :

Vous pouvez le générer vous-même :

feedback := model.NewTripFeedback(
        ID: primitive.NewObjectID(),
        createRequest.UserID,
Copier après la connexion

Ou, vous ne l'avez pas transmis :

type TripFeedback struct {
    ID        *primitive.ObjectID `json:"_id" bson:"_id,omitempty"`
    UserID    string             `json:"user_id" bson:"user_id"`
    ...
Copier après la connexion

Ensuite, si l'ID n'est pas initialisé, l'ID sera généré.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!