baucis-decorator-deep-select
v1.0.7
Published
Adds automatic deep populate + select functionality.
Downloads
14
Maintainers
Readme
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 = require('baucis');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;
var CommentProps = {};
CommentProps.by = {
type: ObjectId,
ref: 'User'
};
CommentProps.comment = {
type: String
};
CommentProps.replies = {
type: [{
type: ObjectId,
ref: 'Comment'
}]
};
var CommentSchema = new Schema(CommentProps);
var CommentModel = mongoose.model('Comment', CommentSchema);
var CommentController = baucis.rest('Comment');
var decorators = require('baucis-decorators');
decorators.add.call(CommentController, [
'baucis-decorator-deep-select'
]);
/**
* Expose controller.
*/
module.exports = 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.