baucis-decorator-deep-select
Adds automatic deep populate + select functionality.
Install
npm install baucis-decorators baucis-decorator-deep-select --save
Usage
Just add the decorator and it should work if you're using a version of mongoose
that supports deep population. The latest release does not yet support this but 4.1 should. Until then, use npm install timbur/mongoose --save
.
Example
controllers/Comment.js
var baucis = ;var mongoose = ;var Schema = mongooseSchema;var ObjectId = SchemaTypesObjectId; var CommentProps = {}; CommentPropsby = type: ObjectId ref: 'User';CommentPropscomment = type: String;CommentPropsreplies = type: type: ObjectId ref: 'Comment' ; var CommentSchema = CommentProps;var CommentModel = mongoose;var CommentController = baucis; var decorators = ;decoratorsadd; /** * Expose controller. */moduleexports = CommentController;
Then to select and populate some comments a few levels deep, GET a URL as follows.
From single comment:
localhost:8080/api/comments/123?select=replies.replies.replies
From query:
localhost:8080/api/comments?by=someUserId&select=replies.replies.replies
Or select certain fields:
localhost:8080/api/comments?by=someUserId&select=comment by.name by.image comment replies.comment replies.replies.comment replies.replies.replies.comment
This should pair quite well with something that might convert a GraphQL-like string to the above select
parameters.