code: function parseFieldSyntax(field, keyword) {
    const
      arrayField = field.match(/^(.*?[^\\])\[(.*)]$/),
      array = arrayField !== null;
    let
      path = field,
      value = null;
  
    if (array) {
      let rawValue;
      [, path, rawValue] = arrayField;
  
      try {
        value = JSON.parse(rawValue);
      } catch (error) {
        return Bluebird.reject(new BadRequestError(`[${keyword}] Invalid array value "${rawValue}"`));
      }
    }
  
    // clean up any escaped bracked from the field path
    path = path.replace(/\\([[\]])/g, '$1');
  
    return Bluebird.resolve({[keyword]: new NormalizedExists(path, array, value)});
  }
docs: Verifies that the provided value is a valid field syntax.
  Accepted syntaxes:
  - nested field path (e.g. "path.to.nested.field")
  and/or:
  - array vallue description( e.g. "path.to.array['value']")
  
  Returns an object of the following form:
  {
  path: '<field path>',
  type: ['object'|'array'],
  [value: '<search value>']
  }
  
  Example:
  'foo.bar.baz' => { path: 'foo.bar.baz', type: 'object' }
  'foo.bar["baz"]' => {path: 'foo.bar', type: 'array', value: 'baz'};
  
  @param  {String} value
  @param  {String} keyword
  @param  {String} field
  @return {Promise}