code: function Query(criteria, options) {
    if (!(this instanceof Query))
      return new Query(criteria, options);
  
    var proto = this.constructor.prototype;
  
    this.op = proto.op || undefined;
  
    this.options = {};
    this.setOptions(proto.options);
  
    this._conditions = proto._conditions
      ? utils.clone(proto._conditions)
      : {};
  
    this._fields = proto._fields
      ? utils.clone(proto._fields)
      : undefined;
  
    this._update = proto._update
      ? utils.clone(proto._update)
      : undefined;
  
    this._path = proto._path || undefined;
    this._distinct = proto._distinct || undefined;
    this._collection = proto._collection || undefined;
    this._traceFunction = proto._traceFunction || undefined;
  
    if (options) {
      this.setOptions(options);
    }
  
    if (criteria) {
      if (criteria.find && criteria.remove && criteria.update) {
        // quack quack!
        this.collection(criteria);
      } else {
        this.find(criteria);
      }
    }
  }
docs: /* global Map 
  Query constructor used for building queries.
  
  ####Example:
  
  var query = new Query({ name: 'mquery' });
  query.setOptions({ collection: moduleCollection })
  query.where('age').gte(21).exec(callback);
  
  @param {Object} [criteria]
  @param {Object} [options]
  @api public