Finding Files

Each file stored in GridFS has a unique Id assigned to it, and that is the primary way of accessing the stored files.

Find and FindAsync methods

If you don’t know the Id, you can use the Find or FindAsync method to find matching files using a filter. The filter must be of type FilterDefinition<GridFSFileInfo>.

For example, to find the newest revision of the file named “securityvideo” uploaded in January 2015:

IGridFSBucket bucket;
var filter = Builders<GridFSFileInfo>.Filter.And( 
    Builders<GridFSFileInfo>.Filter.EQ(x => x.Filename, "securityvideo"),
    Builders<GridFSFileInfo>.Filter.GTE(x => x.UploadDateTime, new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Utc)),
    Builders<GridFSFileInfo>.Filter.LT(x => x.UploadDateTime, new DateTime(2015, 2, 1, 0, 0, 0, DateTimeKind.Utc)));
var sort = Builders<GridFSFileInfo>.Sort.Descending(x => x.UploadDateTime);
var options = new GridFSFindOptions
{
    Limit = 1,
    Sort = sort
};
using (var cursor = bucket.Find(filter, options))
{
   var fileInfo = cursor.ToList().FirstOrDefault();
   // fileInfo either has the matching file information or is null
}
using (var cursor = await bucket.FindAsync(filter, options))
{
   var fileInfo = (await cursor.ToListAsync()).FirstOrDefault();
   // fileInfo either has the matching file information or is null
}

GridFSFileInfo class

The GridFSFileInfo is a strongly typed class that represents the information about a GridFS file stored in the “fs.files” collection.

This class is a strongly typed wrapper around a backing BsonDocument. It makes it easier to extract the information available in a files collection documents.

In older drivers it was possible to store arbitrary information at the root level of a files collection document. If you need to access that information you can use the BackingDocument property to get access to the complete backing document. When uploading new GridFS files you should store any additional information you want to associate with the uploaded file inside the Metadata document.