我试图通过告诉 C# 驱动程序排序顺序是什么来弄清楚如何对服务器端的文档集合进行排序,但它似乎还不支持该构造。
是否有可能以其他方式做到这一点?
您也可以使用 MongoCursor 类上的 SetSortOrder 方法:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
只是为了补充克里斯的答案,在 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);
请记住在您排序的字段上有一个索引:]
使用现有 C# 驱动程序的方法似乎如下:
db["collection"].Find(new Document().Append("query",
new Document()).Append("orderby",
new Document().Append(name:1).Append(age,-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();
}
因为我不懂 C#,所以我在 JavaScript 中执行此操作,但它应该具有与 C# 驱动程序等效的语法。
如果您的查询如下所示:
db.c.find({"foo" : "bar"})
并且您想按“baz”升序排序,将查询包装在“query”字段中并添加“orderby”字段:
db.c.find({"query" : {"foo" : "bar"}, "orderby" : {"baz" : 1}})
对于降序排序,使用 -1。