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

382
Vistas
Obtener datos de la relación @ManyToOne() mikro orm mongodb

Tengo una entidad de publicación:

 export class Post { @PrimaryKey() _id!: ObjectId; @Field(() => ID) @SerializedPrimaryKey() id!: string; @Field(() => String) @Property() createdAt: Date = new Date(); @Field(() => String) @Property({ onUpdate: () => new Date() }) updatedAt: Date = new Date(); @Field(() => String) @Property() title!: string; @Field(() => String) @Property() excerpt!: string; @Field(() => String) @Property() content!: string; @Field(() => User) @ManyToOne() author!: User; }

Entidad usuaria:

 @ObjectType() @Entity() export class User { @PrimaryKey() _id!: ObjectId; @Field(() => ID) @SerializedPrimaryKey() id!: string; @Field(() => String) @Property() createdAt = new Date(); @Field(() => String) @Property({ onUpdate: () => new Date() }) updatedAt = new Date(); @Field(() => String) @Property() name!: string; @Field(() => String) @Property({ unique: true }) email!: string; @Property() password!: string; @Field(() => [Post], { nullable: true }) @OneToMany(() => Post, (post) => post.author) posts = new Collection<Post>(this); }

Crear función de publicación:

 @Mutation(() => Post) async createPost( @Arg("post") post: PostInput, @Ctx() { em, req }: appContext ) { const newPost = em.create(Post, { ...post, author: new ObjectId(req.session.sid), }); await em.persistAndFlush(newPost); return newPost; }

Como puede ver, Usuario y Publicación están relacionados con relaciones de uno a muchos, respectivamente. user.posts funciona correctamente, ya que necesitamos agregar init() . Pero cuando traté de iniciar sesión post.author me está dando lo siguiente:

 Ref<User> { _id: ObjectId('600663ef9ee88b1b9c63b275') }

He buscado en los documentos pero no pude encontrar cómo completar el campo de autor.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Para completar una relación, puede usar el wrap de ajuste:

 await wrap(newPost.author).init();

Si la entidad ya estuviera cargada, bastaría con marcarla como poblada:

 await wrap(newPost.author).populated();

(pero aquí no está cargado, puede saberlo por Ref<> cuando lo registra, está allí solo para entidades no cargadas)

https://mikro-orm.io/docs/entity-helper/#wrappedentity-and-wrap-helper

Si desea obtener el mismo resultado para las entidades cargadas y las entidades persistentes recientemente, puede usar populateAfterFlush: true en la configuración de ORM. De esa forma, todas las relaciones se completarán después de llamar a em.flush() . Pero eso tampoco ayudaría aquí, ya que está trabajando con un PK de una entidad existente que no está cargada (por ejemplo, ayudaría al usar newPost.author = new Author() ).

Por cierto, no debería ser necesario usar la identificación del objeto aquí, esto también debería estar bien:

 const newPost = em.create(Post, { ...post, author: req.session.sid, });
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