[英]How to specify an Order or Sort using the C# driver for MongoDB?
我试图弄清楚如何通过告诉 C# 驱动程序排序顺序是什么来对服务器端的文档集合进行排序,但它似乎还不支持该构造。
是否有可能以其他方式做到这一点?
您还可以使用 MongoCursor 类上的 SetSortOrder 方法来完成此操作:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
只是为了添加到 Chris 的答案,在 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
对于异步方法:
var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
Sort = sort
});
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();
请注意,要对多个字段进行排序,请使用以下命令:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("AndByMe");
如果你想使用 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);
请记住在您排序的字段上有一个索引:]
@DmitryZyr 对 FindAsync 的回答不起作用。 然而,这一点做到了。
var sortDefinition = new SortDefinitionBuilder<ImmutableLog>().Descending("date");
var findOptions = new FindOptions<ImmutableLog>() {Sort = sortDefinition};
await this.Collection.FindAsync(new BsonDocument(), findOptions);
我目前使用 API 版本 MongoDB.Driver 2.8.1。 这是我调用的方法,用于返回降序排序的对象列表(如果需要):
public static IEnumerable<TEntity> GetDocumentsForCollection(
IMongoDatabase database,
string collectionName,
FilterDefinition<TEntity> query,
string databaseCollectionKeyToSortOnDescending)
{
var _mongoSettings = new MongoCollectionSettings();
_mongoSettings.GuidRepresentation = GuidRepresentation.Standard;
var _collection = database.GetCollection<TEntity>(collectionName, _mongoSettings);
if (string.IsNullOrEmpty(databaseCollectionKeyToSortOnDescending))
{
return _collection.Find(query).ToList();
}
return _collection.Find<TEntity>(query).Sort(Builders<TEntity>.Sort.Descending(databaseCollectionKeyToSortOnDescending)).ToList();
}
您可以像这样使用SortDefinition
应用排序:
FilterDefinition<User> filter1 = Builders<User>.Filter.Eq(a => a.Deleted , false);
SortDefinition<User> sort = Builders<User>.Sort.Descending(a => a.Id);
List<User> result = _dbContext.Users.Find(filter1).Sort(sort).Limit(10).ToList();
我在 JavaScript 中这样做,因为我不知道 C#,但它应该具有与 C# 驱动程序等效的语法。
如果您的查询如下所示:
db.c.find({"foo" : "bar"})
并且您想按“baz”升序排序,将您的查询包装在“查询”字段中并添加一个“orderby”字段:
db.c.find({"query" : {"foo" : "bar"}, "orderby" : {"baz" : 1}})
对于降序排序,请使用 -1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.