Estoy bastante seguro de que la respuesta es "no" para MongoDB. No hay forma de proporcionar una función de clasificación personalizada, solo puede proporcionar las claves para ordenar. Hay a request for custom sorting functions e incluso mencionó su caso en particular: Ayudante
Javascript especie para la clasificación de encargo/indexación
[...]
Podría esto ser usado para ordenar alfabéticamente en un campo, y poner documentos con un valor nulo al final del conjunto de resultados?
[...]
@ Nick - sí
Así que usted no está solo en su deseo de poner null
s en un extremo o el otro.
Creo que lo mejor que puede hacer en este momento es hacerlo en Ruby, algo como esto:
nils, not_nils = People.asc(:age).partition { |p| p.age.nil? }
people = not_nils + nils
No consumo Mongoid pero se supone que asc
le da una Enumerable, si no, entonces tal vez podría pegar un to_a
allí. Por supuesto, este tipo de piratería es inútil si estás paginating.
Gracias por el enlace a la función solicitada. Seguiré esto. Mongoid usa criterios, por lo que necesitaré un to_a allí. Pero creo que podemos prescindir de los nulos después de todo. Y como dices, la búsqueda hará que esto sea mucho menos importante. –
después de mirarlo más de cerca, lo que se propone es la clasificación de Javascript basada en una función. esto significaría que para ordenar la colección consultada, mongodb tendrá que iterar sobre toda la colección, lo que ciertamente no resuelve el problema. Lo que deseo que tenga mongodb es mucho más simple: nulo en último lugar, o nulo primero. –
@Stephane: la ordenación requiere que la base de datos gire a través de todo el conjunto de resultados aplicando una acción de todos modos, el problema es que MongoDB solo le permite usar 'a> b' o' a