jmc*_*mcd 39 c# sorting mongodb
我试图弄清楚如何通过告诉C#驱动程序排序顺序来排序服务器端的文档集合,但它似乎还不支持该结构.
是否有可能以其他方式做到这一点?
Chr*_*ook 73
您也可以使用MongoCursor类上的SetSortOrder方法执行此操作:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
Run Code Online (Sandbox Code Playgroud)
Ser*_*pov 14
我想补充克里斯的回答,在C#驱动程序2.x的现在与做SortBy,SortByDescending,ThenBy&ThenByDescending
collection.Find(bson => true).SortBy(bson => bson["SortByMeAscending"]).ThenByDescending(bson => bson["ThenByMeDescending"]).ToListAsync()
Run Code Online (Sandbox Code Playgroud)
现在它更像是Linq.
http://mongodb.github.io/mongo-csharp-driver/2.0/reference/driver/crud/reading/#sort
Dmi*_*Zyr 11
对于异步方法:
var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
Sort = sort
});
Run Code Online (Sandbox Code Playgroud)
Kav*_*eri 10
您可以像这样应用排序SortDefinition:
FilterDefinition<User> filter = Builders<User>.Filter.Eq(a => a.Deleted , false);
SortDefinition<User> sort = Builders<User>.Sort.Descending(a => a.Id);
List<User> result = _dbContext.Users.Find(filter).Sort(sort).Limit(10).ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,要对多个字段进行排序,请使用:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("An??dByMe");
Run Code Online (Sandbox Code Playgroud)
如果你想使用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
}
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您也可以限制结果:
var query=
(from c in collection.AsQueryable<C>()
orderby c.X descending
select c).Take(1);
Run Code Online (Sandbox Code Playgroud)
只记得在你要排序的字段上有一个索引:]
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();
Run Code Online (Sandbox Code Playgroud)
看来使用现有的C#驱动程序执行此操作的方法如下:
db["collection"].Find(new Document().Append("query",
new Document()).Append("orderby",
new Document().Append(name:1).Append(age,-1)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44052 次 |
| 最近记录: |