Maison > développement back-end > Golang > Comment créer un document Mongo qui le modélise d'après deux structures ?

Comment créer un document Mongo qui le modélise d'après deux structures ?

王林
Libérer: 2024-02-14 23:54:10
avant
922 Les gens l'ont consulté

如何创建一个 Mongo 文档,在两个结构之后对其进行建模?

Dans cet article, l'éditeur PHP Baicao vous présentera comment créer un document dans une base de données Mongo et le modéliser entre deux structures différentes. Dans la base de données Mongo, un document est une unité de base utilisée pour stocker et organiser des données, semblable à une ligne ou un document dans une base de données relationnelle. Afin de mieux utiliser la flexibilité et l'évolutivité de Mongo, nous pouvons planifier et concevoir la structure du document pour répondre à nos besoins spécifiques avant de le créer. Nous détaillerons ensuite comment créer un document Mongo et le modéliser entre différentes structures.

Contenu de la question

J'ai créé une API simple en utilisant la base de données gingonic et mongo. Je publie un objet simple comme celui-ci sur l'API pour créer un document mongo avec la même forme. J'ai trouvé beaucoup d'exemples utilisant des tableaux, mais pas des cartes. Je l'ai fait en suivant le démarrage rapide sur www.mongodb.com.

{
    "email": "[email protected]",
    "profile": {
        "first_name": "Test",
        "last_name": "Example"
    }
}
Copier après la connexion

J'ai ces deux structures go (pour les fichiers utilisateur et de configuration)

type User struct {
    ID       primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
    Email    string             `json:"email" binding:"required,email" bson:"email"`
    Profile  *Profile           `json:"profile" binding:"required" bson:"profile,inline"`
}
type Profile struct {
    FirstName string `json:"first_name" binding:"required,min=3" bson:"first_name"`
    LastName  string `json:"last_name" binding:"required" bson:"last_name"`
}
Copier après la connexion

Voici ma fonction de création :

func (dbc *Dbc) CreateUser(user *models.User) error {
    newUser := models.User{
        Email:    user.Email,
        Profile:  &models.Profile{
                    FirstName: user.Profile.FirstName, 
                    LastName: user.Profile.LastName},
    }
    _, err := dbc.GetUserCollection().InsertOne(dbc.ctx, newUser)
    return err
}
Copier après la connexion

Cela créera un document, mais comme ceci (donc pas de profils de sous-document) :

{
    "email": "[email protected]",
    "first_name": "Test",
    "last_name": "Example"
}
Copier après la connexion

Créer de nouveaux documents sans structures Go fonctionne très bien. Alors comment modéliser un objet json en utilisant une structure go contenant des sous-documents ? Je ne trouve pas beaucoup d'exemples, même pas sur github. Quelqu'un veut-il m'indiquer la bonne direction ?

newUser := bson.D{
    bson.E{Key: "email", Value: user.Email},
     bson.E{Key: "profile", Value: bson.D{
    bson.E{Key: "first_name", Value: user.Profile.FirstName},
    bson.E{Key: "last_name", Value: user.Profile.LastName},
     }},
}
Copier après la connexion

Solution de contournement

Vous avez utilisé la balise bson:"profile,inline", en lui disant d'être en ligne, c'est pourquoi vous n'avez pas le sous-document dans votre base de données. Il fait exactement ce que vous lui demandez.

Si vous ne souhaitez pas intégrer le fichier de configuration mais avoir des sous-documents, supprimez l'option ,inline :

Profile *Profile `json:"profile" binding:"required" bson:"profile"`
Copier après la connexion

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