Hola todos, estoy teniendo problemas para relacionar informacion entre dos colleciones de MongoDb.
Ya que se que mongodb no es una base de datos relacional, pero igual, deberia poder relacionar informacion, como usuarios y paises, por ejemplo:
Bien es siguiente es mi codigo, que funciona perfecto menos el populate, me devuelve null el campo que deberia devolverme el pais:
Este seria el model o el schema de mongodb:
Código Javascript
:
Ver originalvar mongoose = require('mongoose'),
Schema = mongoose.Schema;
//Listado de paises
var countrySchema = new Schema({
country:{ type: String }
});
//Usuarios del sistema
var userSchema = new Schema({
full_name:{ type: String },
username: { type: String, required: true, index: { unique: true }},
email: { type: String, required: true, index: { unique: true } },
password: { type: String, required: true },
birthday: { type: String },
country: { type : Schema.Types.ObjectId, ref : 'Country' },
genre: { type: String, enum: ['Female', 'Male'] }
});
//Dejamos el schema para que se acceda desde afuera del archivo
exports.Country = mongoose.model('Country', countrySchema);
//Dejamos el schema para que se acceda desde afuera del archivo
exports.User = mongoose.model('User', userSchema);
Bien, esto lo cargo dentro del metodo que lo llama, de la siguiente manera:
Código Javascript
:
Ver original//Traemos el modelo de base de datos
var UserSchema = require('../models/userModel.js');
//Dejamos accesso desde afuera
exports = module.exports = User;
//Controller de usuarios
function User(){
var self = this;
//Select 1 user
this.getUsers = function(req, res) {
UserSchema.User.find().populate('country').exec(function(err, user){
if(!err){
res.json(user);
} else {
console.log('ERROR: ' + err);
}
});
};
}
Y con Express hago las rutas para poder ejectuar este metodo...
Código Javascript
:
Ver original//Manejo del usuario
user = new user(mongoose);
app.get('/user', user.getUsers);
app.get('/user/:id', user.getUser);
app.post('/user', user.updateUser);
app.put('/user', user.addUser);
Todo esto lo llamado desde un archivo index.js..
y mi resultado es el siguiente
[
{
"full_name": "Claudio A. Marrero",
"username": "cmarrero01",
"email": "
[email protected]",
"password": "xxxxxxxxxxxxxx",
"birthday": "08/02/1985",
"country": null,
"genre": "Male",
"_id": "524f36e34ca6e9c82a000001",
"__v": 0
},
{
"full_name": "Claudio A. Marrero",
"username": "cmarrero02",
"email": "
[email protected]",
"password": "xxxxxxxxxxx",
"birthday": "08/02/1985",
"country": null,
"genre": "Male",
"_id": "524f3a6a0e8dbf0425000002",
"__v": 0
}
Como veran, country es "null", cuando deberia ser el registro dentro de la collection country...
No he logrado hacer que ese valor tenga la inforacion correspondiente, si no es con el populate, de que manera puedo relacionar la informacion entre dos collectiones?