Я думаю, что вы можете использовать агрегационный конвейер с $addFields
, $toLower
(для преобразования имени файла в нижний регистр во временном поле) и $sort
для их сортировки независимо от регистра
В оболочке mongodb вынапишет что-то вроде этого:
db.collection.aggregate([{
$addFields : {
"lowercaseFileName" : {
$loLower : "$fileName"
}
},{
$sort : {
"metadata.type" : 1,
lowercaseFileName : 1
}
}
}])
Пожалуйста, напишите аналогичный код в C #, и посмотрите, работает ли он.Я не знаю c #, иначе я бы дал вам точный запрос, но я не могу.
Идея состоит в том, чтобы преобразовать имя файла в нижний регистр, сохранить его во временном поле, используя addFields и отсортировать по этому полю.
Надеюсь, это поможет вам.
Подробнеео $ addFields , $ toLower здесь.
Обновление
Для тех, кто хочет рабочий код в C #, благодаря @ kaloyan-manev
Вы можете использовать это:
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();