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
});
複数のフィールドでソートするには、これを使用することに注意してください。
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)));
私はサムコーダーに頼りにされました こちら
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();