到目前为止,我一直在使用以下代码来查找我的文档并对它们进行排序:
var options = new FindOptions
{
Modifiers = new BsonDocument("$hint", "PathTypeFilenameIndex")
};
return await Collection
.Find(f => f.Metadata["path"] == path, options)
.SortBy(f => f.Metadata["type"])
.ThenBy(f => f.Filename)
.ToListAsync();
我有一个类,其中包含路径和类型字段的元数据字段,也有一个文件名字段。我想要将所有具有给定路径的元数据内文档按类型和文件名排序。
例如,按Name字段排列的文档列表如下:
a, Ab, B, c, D
不幸的是,我得到了类似这样的结果:
Ab, B, D, a, c
这是因为 MongoDB 使用简单的二进制比较对数据进行排序,其中由于它们的 ASCII 码,“A”小于“a”。
那么我的问题是:是否有一种方法可以进行不区分大小写的排序并继续使用“$ hint”?
我通过Find方法传递的选项应告诉 MongoDB 使用哪个索引。我在这篇文章中找到了一个解决方案:MongoDB和C#:不区分大小写搜索,但这种方法不能用于排序,我无法告诉 MongoDB 使用哪个索引。
return await Collection.Aggregate() .Match(f => f.Metadata["path"] == path) .AppendStage(new BsonDocument("$addFields",
new BsonDocument("lowercaseFileName",
new BsonDocument("$toLower", "$filename"))))
.AppendStage(new BsonDocument("$sort",
new BsonDocument
{
{"metadata.type", 1},
{"lowercaseFileName", 1}
})).ToListAsync();
- Kaloyan Manev