如何使用MongoDB的C#驱动程序指定订单或排序?

时间:2010-01-23 14:51:15

标签: c# mongodb sorting

我试图弄清楚如何通过告诉C#驱动程序排序顺序来对服务器端的文档集合进行排序,但它似乎还不支持该结构。

是否有可能以其他方式做到这一点?

10 个答案:

答案 0 :(得分:68)

您也可以使用MongoCursor类上的SetSortOrder方法:

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));

答案 1 :(得分:12)

只是为了回答克里斯的回答,在C#Driver 2.x中,它现在已经完成SortBySortByDescendingThenBy& ThenByDescending

collection.Find(bson => true).SortBy(bson => bson["SortByMeAscending"]).ThenByDescending(bson => bson["ThenByMeDescending"]).ToListAsync()

现在它更像是Linq。

http://mongodb.github.io/mongo-csharp-driver/2.0/reference/driver/crud/reading/#sort

答案 2 :(得分:8)

请注意,要对多个字段进行排序,请使用以下命令:

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("An‌​dByMe");

答案 3 :(得分:6)

如果你想使用linq:

来自文档:(http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/

var query=
    (from c in collection.AsQueryable<C>()
    orderby c.X
    select c)

foreach (var d in query)
{
    // process your documents
}

如果您愿意,您也可以限制结果:

var query=
    (from c in collection.AsQueryable<C>()
    orderby c.X descending
    select c).Take(1);

请记住在您要排序的字段上有一个索引:]

答案 4 :(得分:6)

对于异步方法:

var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
    Sort = sort
});

答案 5 :(得分:5)

使用现有的C#驱动程序执行此操作似乎如下:

db["collection"].Find(new Document().Append("query", 
new Document()).Append("orderby", 
new Document().Append(name:1).Append(age,-1))); 

Sam Corder here

转向了我

答案 6 :(得分:2)

在MongoDB.Driver 2.5.0中简单使用api

var client = new MongoClient("mongodb://localhost:27017");

var database = client.GetDatabase("Blog");

var list = database.GetCollection<BlogPost>("BlogPost")
    .Find(e => e.Deleted == false)
    .SortByDescending(e => e.CreatedOn)
    .Limit(20)
    .ToList();

答案 7 :(得分:1)

@DmitryZyr对FindAsync的回答无效。但是,这确实做到了。

var sortDefinition = new SortDefinitionBuilder<ImmutableLog>().Descending("date");
var findOptions = new FindOptions<ImmutableLog>() {Sort = sortDefinition};
await this.Collection.FindAsync(new BsonDocument(), findOptions);

答案 8 :(得分:0)

我当前正在使用API​​版本MongoDB.Driver 2.8.1。 这是我调用的方法,如果需要的话,将使用降序排序返回对象列表:

undefined

答案 9 :(得分:-2)

我在JavaScript中这样做,因为我不知道C#,但它应该与C#驱动程序具有相同的语法。

如果您的查询如下:

db.c.find({"foo" : "bar"})

并且您希望按“baz”升序排序,将您的查询包装在“查询”字段中并添加“orderby”字段:

db.c.find({"query" : {"foo" : "bar"}, "orderby" : {"baz" : 1}})

对于降序排序,请使用-1。