我试图弄清楚如何通过告诉C#驱动程序排序顺序来对服务器端的文档集合进行排序,但它似乎还不支持该结构。
是否有可能以其他方式做到这一点?
答案 0 :(得分:68)
您也可以使用MongoCursor类上的SetSortOrder方法:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
答案 1 :(得分:12)
只是为了回答克里斯的回答,在C#Driver 2.x中,它现在已经完成SortBy
,SortByDescending
,ThenBy
& 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("AndByMe");
答案 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。