web-dev-qa-db-ja.com

MongoDBのC#ドライバーを使用して順序または並べ替えを指定する方法

C#ドライバーに並べ替え順序を伝えることで、サーバー側のドキュメントのコレクションを並べ替える方法を見つけようとしていますが、まだその構造をサポートしていないようです。

これを他の方法で行うことは可能ですか?

37
jmcd

MongoCursorクラスのSetSortOrderメソッドを使用して行うこともできます。

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
68
Chris Brook

Chrisの答えに追加するために、C#Driver 2.xではSortBySortByDescendingThenByThenByDescendingで完了しました。

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

12
Sergej Popov

非同期メソッドの場合:

var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
    Sort = sort
});
10
DmitryZyr

複数のフィールドでソートするには、これを使用することに注意してください。

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("An‌​dByMe");
8
Darius

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);

並べ替えの対象となるフィールドにインデックスを付けることを忘れないでください:]

6
Shy Peleg

既存のC#ドライバーを使用してこれを行う方法は次のように思われます。

db["collection"].Find(new Document().Append("query", 
new Document()).Append("orderby", 
new Document().Append(name:1).Append(age,-1))); 

私はサムコーダーに頼りにされました こちら

5
jmcd

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();
5
Mohammad Akbari