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