Mongoose y el puto populate

LR

Una vez más acudo a MV a ver si me podéis echar una mano.

No tengo mucha experiencia con mongo o nosql en general. Necesitaba hacer un join para evitar hacer 2 o 3 llamadas extra a la BBDD y vi que en mongoose existe el concepto de populate.

Me puse a investigar y trastear, pero después de 2 días sigo sin conseguir que funcione.

Básicamente lo único que recibo es null.

Necesito hacer un populate de "3 niveles" por definirlo de alguna manera, pero no consigo hacerlo en ninguno.

Pongo los modelos un poco en pseudocódigo/mal que desde el móvil no puedo copiarlo que no lo tengo en ningún respositorio aún, pero creo que se entiende la estructura y lo que he intentado. Si no, mañana actualizaré desde el pc

Modelos

He hecho varias pruebas

spoiler

En todos los casos el resultado es el mismo, null.

Alguna ayuda o idea de por dónde tirar? Que ya me tiene un poco hasta los mismos y no creo que sea tan difícil hacer un simple join...

JuAn4k4

Pero son del tipo DBRef ? (https://www.mongodb.com/docs/manual/reference/database-references/)

Tu lo que necesitas es una bd relacional o algo estás haciendo mal.

No metas listas en users y users en listas, eso está mal. O metes users en la lista o metes listas en el user, pero no las dos.

Si quieres puedes tener otra colección del tipo proyección, eventualmente consistente y que tenga los datos que quieres. Ahora eso si, igual es una mierda actualizarla cada vez que cambié algo del user o de la lista.

1 respuesta
LR

#2 si, al hacer la inserción lo hago con referencia al _id y de hecho, al recuperar los datos a pelo si me lo muestra como objectId y con la id correcta.

La idea era darle caña a mongo, por eso no uso una relacional.

Lo de tener campos duplicados lo he visto en 2 o 3 ejemplos/cursos. Al principio me chocó, pero bueno, básicamente lo quiero para luego en el front, tener un link directo a la lista sin tener que hacer otra llamada ya que lo único que necesito es el id para luego mostrar el detalle en su correspondiente sección.

Luego en la vista detalle saldrá un listado con los usuarios y la relación de cada uno con los demás usuarios, de ahí los "2 niveles" en userlist

1 respuesta
JuAn4k4

#3 Si solo necesitas el id no hace falta que hagas deref. De todas formas un ObjectId no necesariamente es un DBRef.

Para hacer una M:N lo mejor es no usar Mongo. En general mongo apesta pero aún así, una no relacional se usa cuando no hay relaciones o que encaje en el modelo que quieres guardar.

1 respuesta
LR

#4 Al final el populate lo tenia bien, lo que pasa que soy gilipollas y con el sueño, me puse a cargar datos de 2 bbdd distintas, usuarios de la de tests, y listas de otra que tengo. Total, que no funcionaba porque obviamente, no habia referencias validas en la bbdd donde tiro las peticiones.

Tengo que mirarme como mockear para evitar mierdas asi.

1

Usuarios habituales

  • LR
  • JuAn4k4