Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

180
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda