我想根据几个字段对 MongoDB 集合进行排序,一些是升序的,另一些是降序的。 我正在使用官方 C# 驱动程序。我的代码目前看起来像这样:
string[] sortFields = new[] { "surname", "firstname","companyname","email" };
MongoDB.Driver.Builders.SortByBuilder sort = MongoDB.Driver.Builders.SortBy.Ascending(sortFields);
foreach (MongoDB.Bson.BsonDocument doc in contactsCollection.FindAs<MongoDB.Bson.BsonDocument>(query).SetSortOrder(sort))
{
...
我如何更改此代码以使其按降序排列电子邮件?
非常感谢。
最佳答案
您可以链接 SortBy
调用:
var sort = SortBy.Ascending("surname").Descending("email");
foreach (var doc in contactsCollection.FindAs<MongoDB.Bson.BsonDocument>(query).SetSortOrder(sort))
{
...
我会小心地动态构建查询,尤其是在有那么多键的情况下。请记住,MongoDB 只对一个查询使用一个索引,因此您的索引必须非常合适。
示例:find({A: "foo", B: "bar"}).sort("C": -1);
如果复合索引是 {C, A, B}
,这将无法有效地使用索引。它必须是 {A, B, C}
而不是。太多的索引会占用空间并使插入/更新变慢。
关于MongoDB 排序顺序 - 升序和降序字段的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8488009/