node.js - example - La consulta Mongoose/mongoDB se une... pero vengo de un fondo sql
mongoose schema (2)
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:
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.