Как написать запрос для "orderby" в драйвере Mongo для C # для сортировки? - PullRequest
8 голосов
/ 17 февраля 2012

Я пытаюсь получить пять последних документов из коллекции "Deal" в MongoDB, используя драйвер C # для MongoDB.Я могу сделать это с помощью приведенного ниже кода.

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 (), но ему нужен запрос в качестве параметра.Как я могу написать запрос для "orderby" в драйвере Mongo для сортировки C #?

https://stackoverflow.com/a/2148479/778101 задал подобный вопрос здесь.Но принятый ответ не работает для меня.

Ответы [ 5 ]

11 голосов
/ 23 февраля 2012
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);
    }
}

также является правильным методом решения этой проблемы

3 голосов
/ 14 июня 2016

Похоже, что принятый ответ устарел или я его не понимаю. Вот как вы заказываете в MongoDb C # Driver 2.0:

var list = await collection
                     .Find(fooFilter)
                     .Sort(Builders<BsonDocument>.Sort.Descending("NameOfFieldToSortBy")
                     .ToListAsync();
1 голос
/ 17 февраля 2012

Вы можете использовать MongoDB.Driver.Builders.Query.Null в качестве параметра IMongoQuery для Find (), а затем SetSortOrder().SetLimit()

Ваш код может быть как

dbContext.Set()
         .Find(Query.Null).SetSortOrder(SortBy.Descending("ModifiedDateTime"))
         .SetLimit(5);
0 голосов
/ 28 февраля 2012

FindAll - это просто ярлык для Find (Query.Null).

Нет причин, по которым вы не можете использовать SetSortOrder и SetLimit с FindAll.

0 голосов
/ 17 февраля 2012

Вы должны использовать метод Find.Query.And() в c # будет эквивалентно пустому запросу {} в оболочке mongodb.Таким образом, полный пример будет выглядеть так:

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

На самом деле, если вы собрали строгий тип, у него есть метод Find(IMongoQuery query), если нет, то у него есть метод FindAs<Type>(IMongoQuery query).

...