La consulta Mongoose / mongoDB se une … pero vengo de un fondo sql

Vengo de un fondo sql así que escribir consultas en sql donde unir tablas es bastante simple, pero creo que me falta eso en mongoose / mongodb

Básicamente conozco el Subscriber_ID (que se asigna a un documento en la Colección de usuarios)

Quiero sacar el grupo del proyecto, con todos los proyectos a los que pertenece el usuario, así que si tuviera que escribir esto en pseduo sql sería como

Select ProjectGroup.title, Project.Title FROM ProjectGroup, Project, User WHERE User.id = req.body.subscriber_id AND Project.subscriber_id = User.id AND ProjectGroup.project_id = Project.id 

Debe haber una forma de hacer uniones similares en mongoose / mongodb porque el tipo está mapeando a un esquema ¿no?

Mis esquemas …..

Esquema de grupo de proyecto

 var ProjectGroupSchema = new Schema({ title : String , projects : [ { type: Schema.Types.ObjectId, ref: 'Project' } ] }); 

Esquema del proyecto

 var ProjectSchema = new Schema({ title : {type : String, default : '', required : true} , subscribers : [{ type: Schema.Types.ObjectId, ref: 'User' }] }); 

Esquema de usuario

 var UserSchema = new Schema({ first_name : {type: String, required: true} , last_name : {type: String, required: true} }); 

¡Gracias!

¡Estás a un paso de distancia!

Esquema de grupo de proyecto:

 var ProjectGroupSchema = new Schema({ title : String }); 

Esquema del proyecto:

 var ProjectSchema = new Schema({ title : {type : String, default : '', required : true}, group : {type: Schema.Types.ObjectId, ref: 'ProjectGroup' }, _users : [{type: Schema.Types.ObjectId, ref: 'User' }] }); 

Esquema de usuario:

 var UserSchema = new Schema({ first_name : {type: String, required: true}, last_name : {type: String, required: true}, subscribing : [{type: Schema.Types.ObjectId, ref: 'Project' }] }); 

Entonces puedes hacer lo siguiente:

 user.findById(req.userId) .populate('subscribing') .exec(function(err, user){ console.log(user.subscribing); }) 

O:

 project.find({ subscriber : req.userId }) .populate('subscriber') .populate('group') .exec(function(err, projects){ console.log(projects); }) 

No hay uniones en Mongodb. Esta pregunta, creo, es una buena referencia:

MongoDB y “se une”

Para resumir, se deben adoptar diferentes estrategias con mongodb para los problemas que se abordarían a través de combinaciones en DB relacionales. Yo diría que principalmente terminas haciendo una de estas dos cosas:

  • Incrustación: incrusta la información en un único documento que, en un DB relacional, se distribuiría entre diferentes tablas.
  • Unirse a la información del lado del cliente: cuando necesite utilizar información de varios lugares, consulte muchas veces y luego junte las piezas en su cliente.