'Get a file from GridFS by ``"filename"`` or metadata fields.
Returns a version of the file in GridFS whose filename matches
`filename` and whose metadata fields match the supplied keyword
arguments, as an instance of :class:`~gridfs.grid_file.GridOut`.
Version numbering is a convenience atop the GridFS API provided
by MongoDB. If more than one file matches the query (either by
`filename` alone, by metadata fields, or by a combination of
both), then version ``-1`` will be the most recently uploaded
matching file, ``-2`` the second most recently
uploaded, etc. Version ``0`` will be the first version
uploaded, ``1`` the second version, etc. So if three versions
have been uploaded, then version ``0`` is the same as version
``-3``, version ``1`` is the same as version ``-2``, and
version ``2`` is the same as version ``-1``.
Raises :class:`~gridfs.errors.NoFile` if no such version of
that file exists.
:Parameters:
- `filename`: ``"filename"`` of the file to get, or `None`
- `version` (optional): version of the file to get (defaults
to -1, the most recent version uploaded)
- `**kwargs` (optional): find files by custom metadata.
.. versionchanged:: 3.1
``get_version`` no longer ensures indexes.'

def get_version(self, filename=None, version=(-1), **kwargs):

    query = kwargs
    if (filename is not None):
        query['filename'] = filename
    cursor = self.__files.find(query)
    if (version < 0):
        skip = (abs(version) - 1)
        cursor.limit((-1)).skip(skip).sort('uploadDate', DESCENDING)
    else:
        cursor.limit((-1)).skip(version).sort('uploadDate', ASCENDING)
    try:
        grid_file = next(cursor)
        return GridOut(self.__collection, file_document=grid_file)
    except StopIteration:
        raise NoFile(('no    version    %d    for    filename    %r' % (version, filename)))
