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 original
var 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?