MongoDB 排序顺序 - 升序和降序字段的混合

标签 mongodb sorting mongodb-.net-driver

我想根据几个字段对 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/

相关文章:

node.js - Loopback框架中的模型关系

hibernate - 我应该如何将排序添加到包含 Hibernate 内容的 Apache Wicket DataTable?

c# - BsonDateTimeOptions 不设置本地日期时间

Javascript/jQuery 组和排序组

c# - 防止嵌套对象的 mongodb c# 驱动程序将 id 序列化为 _id

mongodb - ReplaceOne 抛出重复键异常

javascript - dropDatabase 后不强制执行唯一字段约束

mysql - Hibernate 事件监听器未捕获事件

MongoDB - 在 $elemMatch 中使用 $where

sql - 使用给定的开始月份对 12 个月 (1-12) 进行排序