

module.exports =
  
  all:(query, callback)->
    constructor = @
    collection = constructor.getCollection()
    collection.find query, (err, cursor)->
      if err
        callback err
      else
        cursor.toArray (err, docs)->
          callback null, docs?.map (doc)->
            new constructor doc
  
  some:(query, options, callback)->
    constructor = @
    collection = constructor.getCollection()
    collection.find query, null, options, (err, cursor)->
      if err
        callback err
      else
        cursor.toArray (err, docs)->
          callback null, docs?.map (doc)->
            new constructor doc
  
  someData:(query, fields, options, callback)->
    [options, callback] = [callback, options] unless callback
    options or= {}
    collection = @getCollection()
    collection.find query, fields, options, callback

  one:(uniqueQuery, callback)->
    constructor = @
    collection = constructor.getCollection()
    collection.findOne uniqueQuery, (err, doc)->
      callback err, unless err then new constructor doc
  
  stream:->
    # TODO: implement changes