2012-09-08 12 views
5

Używam MongoDB na jakiś czas do wykonywania wszelkiego rodzaju szybkich wkładek lub konieczności jak kłoda, ale mam pewne problemy, aby uzyskać naprawdę proste zapytanieJak uzyskać ostatni element w kolekcji MongoDB?

Jak w Mongo, chciałbym zrobić uzyskać podobny do tego T-SQL

SELECT TOP 1 [date] FROM [Collection] ORDER BY [date] desc 

Innymi słowy, jaka jest ostatnia data w kolekcji.

Próbuję użyć FindOne lub dowolnego innego, który może zwrócić jeden dokument, ale żaden nie akceptuje własności sortBy ... jak to zrobić?

var query = Query.EQ("status", "pending"); 
var sortBy = SortBy.Descending("date"); 

return collectionLog.FindOneAs<BsonDocument>(query, sortBy); 

Ostatni wiersz powyżej byłby idealny, ale metoda ta przyjmuje tylko parametr query.

+0

wykorzystania limitu (1);) –

+0

mój problem jest sortowanie, a nie ile zostaną zwrócone – balexandre

+0

Tak nie można korzystać z sort (findOne Myślę, że) tak, użyj find z 'limit', aby zrobić jak findOne sort –

Odpowiedz

8

Nie ma metody .SetSortOrder() z FindOneAs w sterowniku C#. Dzieje się tak, ponieważ FindOneAs zwraca dokument, a .SetSortOrder() jest członkiem MongoCursor.

Równowartość zapytania byłoby coś podobnego do:

var query = Query.EQ("status", "pending"); 
var sortBy = SortBy.Descending("date"); 

return collectionLog.FindAs<BsonDocument>(query).SetSortOrder(sortby).SetLimit(1); 
2

Zgodnie z wersją 1.4 sterownik C# obsługuje LINQ. Myślę, że coś takiego może pomóc:

using MongoDB.Driver.Linq; 

return collectionLog.AsQueryable().Where(l => l.status == "pending").AsQueryable().OrderByDescending(l => l.date); 

Uwaga pierwszy AsQueryable(), że to początek neccessary LINQ do kolekcji Mongo. Drugi AsQueryable() jest potrzebny, ponieważ tam, gdzie zwrot IEnumerable, ale OrderByDescending() zajmuje IQueryable.

+0

aktualna wersja jest 1.6.1 z [GitHub] (https://github.com/mongodb/mongo-csharp-driver) – balexandre

+0

Znam Linq część (nienawidzę, bo nie obsługuje 'GroupBy'), ale zawsze otrzymuję wyjątek bez względu na to, co robię, używam MongoHQ jako mojego hosta mongoDB. – balexandre