57

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

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

4

10 に答える 10

81

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

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
于 2011-04-23T14:51:15.477 に答える
30

クリスの答えに追加するだけで、C#Driver 2.xでは、、、&で実行されるようになりSortByましSortByDescendingThenByThenByDescending

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

于 2015-08-13T13:54:29.173 に答える
24

非同期メソッドの場合:

var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
    Sort = sort
});
于 2017-08-17T13:26:32.777 に答える
21

MongoDB.Driver2.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();
于 2018-01-21T14:48:58.343 に答える
9

複数のフィールドで並べ替えるには、次を使用することに注意してください。

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("An‌​dByMe");
于 2013-06-16T11:07:02.740 に答える
8

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

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

于 2014-12-15T13:59:24.810 に答える
5

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

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

私はここでサムコーダーによってオンにされました

于 2010-01-27T16:18:13.377 に答える
1

FindAsyncに対する@DmitryZyrの回答は機能していませんでした。しかし、これはそうしました。

var sortDefinition = new SortDefinitionBuilder<ImmutableLog>().Descending("date");
var findOptions = new FindOptions<ImmutableLog>() {Sort = sortDefinition};
await this.Collection.FindAsync(new BsonDocument(), findOptions);
于 2020-04-16T17:27:32.163 に答える
1

現在、APIバージョンのMongoDB.Driver2.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();
    }
于 2020-11-04T11:55:18.783 に答える
-1

私はC#を知らないので、JavaScriptでこれを行っていますが、C#ドライバーと同等の構文を持つ必要があります。

クエリが次のようになっている場合:

db.c.find({"foo" : "bar"})

「baz」の昇順で並べ替える場合は、クエリを「query」フィールドでラップし、「orderby」フィールドを追加します。

db.c.find({"query" : {"foo" : "bar"}, "orderby" : {"baz" : 1}})

降順の並べ替えには、-1を使用します。

于 2010-01-23T17:07:44.447 に答える