Referencing another schema in Mongoose Referencing another schema in Mongoose mongoose mongoose

Referencing another schema in Mongoose


It sounds like the populate method is what your looking for. First make small change to your post schema:

var postSchema = new Schema({    name: String,    postedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},    dateCreated: Date,    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],});

Then make your model:

var Post = mongoose.model('Post', postSchema);

Then, when you make your query, you can populate references like this:

Post.findOne({_id: 123}).populate('postedBy').exec(function(err, post) {    // do stuff with post});


Addendum: No one mentioned "Populate" --- it is very much worth your time and money looking at Mongooses Populate Method : Also explains cross documents referencing

http://mongoosejs.com/docs/populate.html


Late reply, but adding that Mongoose also has the concept of Subdocuments

With this syntax, you should be able to reference your userSchema as a type in your postSchema like so:

var userSchema = new Schema({    twittername: String,    twitterID: Number,    displayName: String,    profilePic: String,});var postSchema = new Schema({    name: String,    postedBy: userSchema,    dateCreated: Date,    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],});

Note the updated postedBy field with type userSchema.

This will embed the user object within the post, saving an extra lookup required by using a reference. Sometimes this could be preferable, other times the ref/populate route might be the way to go. Depends on what your application is doing.