Maison  >  Article  >  développement back-end  >  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 ?

王林
王林avant
2024-02-14 23:54:10881parcourir

如何创建一个 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"
    }
}

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

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
}

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

{
    "email": "[email protected]",
    "first_name": "Test",
    "last_name": "Example"
}

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

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer