Skip to content

Instantly share code, notes, and snippets.

@CombatCode
Created July 28, 2014 21:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CombatCode/f875f5e7fa4957ad4cb9 to your computer and use it in GitHub Desktop.
Save CombatCode/f875f5e7fa4957ad4cb9 to your computer and use it in GitHub Desktop.
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
User = mongoose.model('User'),
Profile = mongoose.model('Profile');
/**
* Find profile by username
*/
exports.profile = function(req, res, next, username) {
User
.findOne({
username: username
})
.exec(function(err, user) {
if (err) return next(err);
if (!user) return next(new Error('Failed to load User ' + username));
Profile
.findOne({
user: user
})
.exec(function(err, profile) {
if (err) return next(err);
if (!profile) return next(new Error('Failed to load User ' + user));
req.profile = profile;
next();
});
});
};
/**
* Show an profile
*/
exports.show = function(req, res) {
res.json(req.profile);
};
@heartforit
Copy link

Hi,

just want to drop a short message. That given snippet cannot work at the moment i think.
First of all, you need to understand the concept of Mongodb(Document-oriented schemales noSql database) that means you are not working with relations like in traditional sql databases. That means you can desgin a doucment user, that already contains the user profile. This is possbile because of the doucment desgin of Mongodb(BSON). Another advantage is, to have great performance, because your data is collected diretly in one place so the database has not to do another table or collection lookup.
In your specific case of using mongoose, there is a chance to use schemas on the application level(think about indexies for performance increase).
See also: http://mongoosejs.com/docs/guide.html

And if you want to hold data in two different models (or collections) you can use population:
See: http://mongoosejs.com/docs/populate.html

The reason why you should use an orm-mapper like mongoose is, that mongodb cannot autocast your fields for example. Mongodb is schemales so an value of the field for example zip could have "12345" or 12345. That is in fact a huge diference for the type save mongodb.
Sql-Databases are doing casting by using a predefined table schema. You can also set default values within an traditional sql schema. While mongodb does not have any of this functions like relations, transactions, defaulting, auto field casting and length validation etc.

You also have to think if a classical sql database better fits your use cases. Mongodb scores with great performance and simple schemas to persist just everyting, but if you have data with high need of data safety(transactions) and integrity (relations), you should maybe use a sql database.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment