docs: function(callRemove, whereProperties, whereValue, whereEquals, out, delaySort, cascade, options)
    {
      var where = createWhere( whereProperties, whereValue, whereEquals );
      var removed = out || this.cloneEmpty();
      var removedIndices = [];
  
      batchExecute(function()
      {
        for (var i = 0; i < this.length; i++)
        {
          var model = this[ i ];
  
          if ( where( model ) )
          {
            removedIndices.push( i );
            removed.push( model );
          }
        }
  
        for (var i = 0; i < removed.length; i++)
        {
          var model = removed[ i ];
          var key = model.$key();
  
          this.map.remove( key );
  
          if ( callRemove )
          {
            model.$remove( cascade, options );
          }
        }
  
      }, this );
  
      this.trigger( Collection.Events.Removes, [this, removed, removedIndices] );
  
      if ( !delaySort )
      {
        this.sort();
      }
  
      return removed;
    }