2012-09-08 11 views
5

Sto usando MongoDB per qualche tempo per eseguire tutti i tipi di inserti veloci o avendo come un tronco, ma sto avendo qualche problema di ottenere un davvero semplice queryCome posso ottenere l'ultimo elemento in una collezione MongoDB?

Come, in Mongo, dovrei fare per ottenere un simile a questo T-SQL

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

In altre parole, qual è l'ultima data nella raccolta.

Sto cercando di utilizzare FindOne o qualsiasi altro che può restituire un documento, ma nessuno accetta una proprietà sortBy ... come farei questo?

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

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

L'ultima riga sopra sarebbe perfetto, ma questo metodo accetta solo il parametro query.

+0

limite uso (1);) –

+0

il mio problema è l'ordinamento, non quanti saranno restituiti – balexandre

+0

Sì, non è possibile utilizzare findOne con sort (penso) quindi, usa find con 'limit' per fare come findOne sort –

risposta

8

Non esiste il metodo .SetSortOrder() di FindOneAs nel driver C#. Questo perché FindOneAs restituisce un documento mentre .SetSortOrder() è un membro di MongoCursor.

La query equivalente sarebbe qualcosa di simile a:

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

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

In base alla versione 1.4, il driver C# supporta LINQ. Penso che qualcosa di simile potrebbe aiutare:

using MongoDB.Driver.Linq; 

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

Si prega di notare il primo AsQueryable(), che è il vostro inizio neccessary a LINQ in una collezione Mongo. Il secondo AsQueryable() è necessario perché restituire IEnumerable, ma OrderByDescending() richiede IQueryable.

+0

la versione corrente è 1.6.1 da [GitHub] (https://github.com/mongodb/mongo-csharp-driver) – balexandre

+0

Conosco il Linq parte (odio perché non supporta 'GroupBy') ma ottengo sempre un'eccezione indipendentemente da ciò che faccio, sto usando MongoHQ come host mongoDB. – balexandre

Problemi correlati