Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

183
Views
Las estructuras anónimas devuelven un valor de campo vacío
type ( Id struct { // I previously forgot to add the `ID` field in my question, it is present in my code but not on this question as @icza pointed it out to me ID bson.ObjectId `json:"id" bson:"_id"` } User struct { // When using anonymous struct, upon returning the collection, each of the document will have an empty `id` field, `id: ""` Id Email string `json:"email" bson:"email"` ... } // This works User2 struct { ID bson.ObjectId `json:"id" bson:"_id"` Email string `json:"email" bson:"email"` } )

Es posible que aún no haya entendido completamente el concepto de estructuras anónimas. En el ejemplo anterior, al consultar a todos los usuarios de una colección, el campo de id será una cadena vacía "" . Sin embargo, si defino directamente el campo ID en la estructura de User , la id aparece bien. ¿No es esto para lo que son las estructuras anónimas? ¿Básicamente extender la estructura para que no tenga que escribirlos una y otra vez?

Más ejemplo:

 type SoftDelete struct { CreatedAt time.Time `json:"created_at" bson:"created_at"` UpdatedAt time.Time `json:"updated_at" bson:"updated_at"` DeletedAt time.Time `json:"deleted_at" bson:"deleted_at"` } type UserModel struct { SoftDelete } type BlogPost struct { SoftDelete }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El problema aquí es que los campos que tienen tipos de struct (incluidas las estructuras incrustadas) aparecen como documentos incrustados en MongoDB. Si no desea esto, debe especificar el indicador bson "inline" al incrustar una estructura:

 User struct { Id `bson:",inline"` Email string `json:"email" bson:"email"` }

Lo que hace la etiqueta "inline" en MongoDB es que "aplana" los campos de la estructura incrustada como si fueran parte de la estructura del incrustador.

Similarmente:

 type UserModel struct { SoftDelete `bson:",inline"` } type BlogPost struct { SoftDelete `bson:",inline"` }

Editar: la siguiente sección se aplica al tipo de Id original que incrustó bson.ObjectId . El autor de la pregunta aclaró más tarde que esto era solo un error tipográfico (y editó la pregunta desde entonces), y es un campo con nombre, no anónimo. Todavía creo que la información a continuación es útil.

Una cosa a tener en cuenta sobre su tipo de Id : su tipo de Id también bson.ObjectId :

 Id struct { bson.ObjectId `json:"id" bson:"_id"` }

Id no solo tiene un campo de bson.ObjectId , sino que lo incorpora. Esto es importante porque de esta manera su tipo de Id tendrá un método String() promovido desde bson.ObjectId , y también lo tendrá el User que incrusta Id . Habiendo dicho eso, será difícil intentar imprimir o depurar valores de tipo User , porque siempre lo verá impreso como un único ObjectId .

En su lugar, puede convertirlo en un campo regular en Id , incrustar Id en User seguirá funcionando como se esperaba:

 Id struct { ID bson.ObjectId `json:"id" bson:"_id"` }

Ver pregunta+respuesta relacionada: Aplicar una asignación de tipo con mgo

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!