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
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.