2012-02-17 57 views
8

我想從MongoDB的「Deal」集合中使用MongoDB的C#驅動程序檢索五個最近的文檔。我可以用下面的代碼來完成。如何在Mongo驅動程序中爲C#排序查詢「orderby」?

public IList<TEntity> GetRecentFive() 
{ 
    IList<TEntity> entities = new List<TEntity>(); 
    using (MongoDbContext dbContext = new MongoDbContext(_dbFactory)) 
    { 
     var cursor = dbContext.Set<TEntity>().FindAll().SetSortOrder(SortBy.Descending("ModifiedDateTime")).SetLimit(5); 

     foreach (TEntity entity in cursor) 
     { 
      entities.Add(entity); 
     } 
    } 

    return entities; 
} 

但我只想得到最近的5個文檔,FindAll()加載集合中的所有文檔。我試圖用Find()來做,但它需要查詢作爲參數。如何在Mongo驅動程序中爲「#orderby」編寫查詢以便C#排序?

https://stackoverflow.com/a/2148479/778101在這裏問了一個類似的問題。但接受的答案不適合我。

回答

10
using (MongoDbContext dbContext = new MongoDbContext(_dbFactory)) 
{ 
    var query = new QueryDocument(); 

    var cursor = 
     dbContext.Set<TEntity>().Find(query).SetSortOrder(SortBy.Descending("ModifiedDateTime")).SetLimit(5); 

    foreach (TEntity entity in cursor) 
    { 
     entities.Add(entity); 
    } 
} 

也是解決這個問題的正確方法

0

您應該使用Find方法。在c#中的Query.And()將等於在mongodb外殼上的空查詢{}。因此,完整的例子會看起來像:

dbContext.Set<TEntity>() 
     .Find(Query.And()) 
     .SetSortOrder(SortBy.Descending("ModifiedDateTime")) 
     .SetLimit(5); 

其實,如果你收集強鍵入它有方法Find(IMongoQuery query),如果沒有,那麼它有方法FindAs<Type>(IMongoQuery query)

1

您可以使用MongoDB.Driver.Builders.Query.Null爲查找(IMongoQuery參數),比做SetSortOrder().SetLimit()

您的代碼可以像

 
dbContext.Set() 
     .Find(Query.Null).SetSortOrder(SortBy.Descending("ModifiedDateTime")) 
     .SetLimit(5); 
0

FindAll只是查找(Query.Null)的快捷方式。

沒有理由不能使用SetSortOrder和SetLimit和FindAll。

2

看起來接受的答案已過時,或者我不理解它。這是你如何在MongoDb C#驅動2.0中訂購:

var list = await collection 
        .Find(fooFilter) 
        .Sort(Builders<BsonDocument>.Sort.Descending("NameOfFieldToSortBy") 
        .ToListAsync(); 
相關問題