MongoDB C# Case Insensitive Sort and Index

I think you can use aggregation pipeline with $addFields, $toLower (to convert filename to lowercase in temporary field), and $sort to sort them irrespective of the case

In mongodb shell you would write something like this :

db.collection.aggregate([{
    $addFields : {
        "lowercaseFileName" : {
            $loLower : "$fileName"
        }
    },{
        $sort : {
            "metadata.type" : 1,
            lowercaseFileName : 1
        }
    }
}])

Please write the similar code in c#, and see if it works. I dont know c#, otherwise i would have given you the exact query, but i cant.

The idea is to transform the filename to lowercase, save it in temporary field, using addFields and sort by that field.

Hope this helps you out.

Read more about $addFields, $toLower here.

Update

For whoever wants a working code in C# , thanks to @kaloyan-manev

You can use this :

return await Collection.Aggregate()
    .Match(f => f.Metadata["path"] == path) 
    .AppendStage<BsonDocument>(new BsonDocument("$addFields", new BsonDocument("lowercaseFileName", new BsonDocument("$toLower", "$filename")))) 
    .AppendStage<GridFSFileInfo>(new BsonDocument("$sort", new BsonDocument { {"metadata.type", 1}, {"lowercaseFileName", 1} }))
    .ToListAsync();