2012-02-17 29 views
8

Tôi đang cố truy xuất năm tài liệu gần đây từ bộ sưu tập "Giao dịch" trong MongoDB bằng trình điều khiển C# cho MongoDB. Tôi có thể làm điều đó với mã dưới đây.Làm thế nào để viết một truy vấn cho "orderby" trong trình điều khiển Mongo cho C# để sắp xếp?

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

Nhưng tôi muốn chỉ nhận được 5 tài liệu gần đây và FindAll() tải tất cả tài liệu trong bộ sưu tập. Tôi đã cố gắng làm điều đó với Find() nhưng nó cần một truy vấn như một tham số. Làm thế nào tôi có thể viết một truy vấn cho "orderby" trong trình điều khiển Mongo cho C# để sắp xếp?

https://stackoverflow.com/a/2148479/778101 đã đặt một câu hỏi tương tự tại đây. Nhưng câu trả lời được chấp nhận không hiệu quả với tôi.

Trả lời

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

cũng là một phương pháp đúng để giải quyết vấn đề này

0

Bạn nên sử dụng phương thức Tìm. Query.And() trong C# sẽ tương đương với truy vấn trống {} ở vỏ mongodb. Vì vậy, ví dụ hoàn sẽ trông giống như:

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

Trên thực tế nếu bạn bộ sưu tập mạnh mẽ gõ nó có phương pháp Find(IMongoQuery query), nếu không thì nó có phương pháp FindAs<Type>(IMongoQuery query).

1

Bạn có thể sử dụng MongoDB.Driver.Builders.Query.Null như tham số IMongoQuery cho Find() và hơn làm SetSortOrder().SetLimit()

Mã của bạn có thể giống như

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

FindAll chỉ là một phím tắt cho Tìm (Query.Null).

Không có lý do gì bạn không thể sử dụng SetSortOrder và SetLimit với FindAll.

2

Có vẻ như câu trả lời được chấp nhận đã lỗi thời hoặc tôi không hiểu. Đây là cách bạn đặt hàng bằng trong MongoDb C# Trình điều khiển 2.0:

var list = await collection 
        .Find(fooFilter) 
        .Sort(Builders<BsonDocument>.Sort.Descending("NameOfFieldToSortBy") 
        .ToListAsync(); 
Các vấn đề liên quan