2012-11-02 45 views
0

Je me demande comment faire le tri Multifield dans le pilote de MongoDB rubismongodb Multifield sorte

Example of sorting from official site où l'on peut trouver l'exemple suivant:

# Sort in ascending order by :i 
coll.find.sort(:i) 

# Sort in descending order by :i 
coll.find.sort(:i => :desc) 

Selon ces exemples, je fatigué de faire quelque chose comme ça

coll.find.sort(:i,:j) 

et cela ne fonctionne pas

Connaissez-vous la bonne façon de faire le tri multifield chez ruby ​​driver?

Répondre

1

La méthode de tri peut prendre une clé pour le tri à un seul champ, ou un tableau de paires [clé, direction] pour le tri de champs multiples. Voici ce que le vôtre ressemblerait à ceci:

coll.find.sort(["score", 1], ["created_at", 1]) 
+0

Vous pouvez également utiliser: ascendant et: décroissant, pas sûr de l'entier mais puisque vous l'avez écrit, je suppose que cela fonctionne aussi. Les docs sont en fait un peu confus sur ce point, j'ai essayé de trier (: i =>: desc) mais j'ai eu une erreur disant que je devais utiliser la syntaxe du tableau. – mrbrdo

+0

À partir de ruby ​​1.9.3p194 et mongo 1.9.0, cela échoue avec une erreur étrange. J'avais besoin de passer la méthode de tri à un tableau de tableaux, c'est-à-dire: coll.find.sort ([["score", 1], ["created_at"], 1]]). – Fryie

0

après une courte enquête, la réponse a été trouvée

nous pouvons utiliser soit

hash_as_sort_parameters({:field1 => :asc, "field2" => :desc}) 

ou

array_as_sort_parameters([["field1", :asc], ["field2", :desc]]) 

la première manière avec hachage ne fonctionne pas pour moi pour une raison quelconque, mais la seconde est complètement ok