code: function MongoSchema(name, _collection, _DEBUG) {
      this.__name = name;
      this.collection_name = (_.isString(_collection) ? _collection : name);
      this.fields = {};
      this.methods = {};
      this.statics = {};
      this.indexes = [];
      this.virtuals = {};
      this.hasFields = false;
      this.__hasMany = {};  // schemaTarget:options has many (array of objectId)
      this.__belongsTo = {}// schemaTarget:options belongs to (objectId reference)
      this.__debug = _DEBUG;
    }
docs: @classdesc This is a schema file that is used by mongo schemas to register themselves to mongo.
  @memberof crux.Database.Mongo
  @class Schema
  @param {String} name - the schema definition's name
  @param {String} collection - the mongodb collection name
  @param {Boolean} [debug] - Enables or disables debug mode for the Mongo component
  @example
  // current schema file: schemas/user.js
  module.exports = function(userSchema, Mongo) {
  userSchema.collection('users'); // this will set the mongodb collection name from user to users
  userSchema
  .field('name', Mongo.STRING, {
  defaultValue: 'John'
  })
  .field('is_active', Mongo.BOOLEAN, {
  defaultValue: true
  })
  .field('created_at', Mongo.DATE, {
  defaultValue: Date.now
  });
  
  userSchema
  .index('name')
  .belongsTo('application');  // this generates the mongo property application_id of type ObjectId
  };