baucis-decorator-deep-select

1.0.7 • Public • Published

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.

Package Sidebar

Install

npm i baucis-decorator-deep-select

Weekly Downloads

0

Version

1.0.7

License

MIT

Last publish

Collaborators

  • timbur