2013-06-04 11 views
5
db.jason.find().sort({"rank":1}) 

{ "_id" : ObjectId("51ae517372779b7eeeb81342"), "name" : "jason" } 
{ "_id" : ObjectId("51ae517372779b7eeeb81343"), "name" : "jason" } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133a"), "name" : "jason", "rank" : 0 } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133b"), "name" : "jason", "rank" : 1 } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133c"), "name" : "jason", "rank" : 2 } 

Vorrei i documenti senza classifica per concludere il tipo contro l'inizio ... ma anche mantenere gli articoli con classificazione in ordine asc. È possibile o devo predefinire quelli vuoti con una stringa o un numero alto come 99999?Può mongo restituire i documenti con campi vuoti/mancanti alla fine in ordine asc?

risposta

5

Quando si restituisce il risultato per db.jason.find().sort({"rank":1}), MongoDB ordinerà i documenti per tipo "rank" e quindi per valore "rank". Ai fini dell'ordine, MongoDB tratta i documenti in cui manca un campo con un tipo NULL per quel campo. Il tipo NULL è ordinato prima dei tipi numerici e questo non può essere modificato (vedere http://docs.mongodb.org/manual/reference/method/cursor.sort/ per l'ordinamento del tipo incorporato). Suggerirei invece di costruire due query (una per i documenti contenenti "rank" e una per i documenti senza "rank") e unire i risultati nella tua applicazione. Tuttavia, se è necessario mantenere questa singola query, sarà necessario impostare "rank" in tutti i documenti per generare l'ordine desiderato (ad esempio, utilizzando un valore sentinella con un tipo che ordina i tipi numerici).

+0

Questo è quello che ho capito, sei a conoscenza della funzione [eval()] (http://docs.mongodb.org/manual/reference/command/eval/), sembra essere in grado di gestire l'ordinamento personalizzato ma non sono così sicuro dei campi vuoti. – jasonsemko

Problemi correlati