MISE À JOUR: Cette réponse semble être périmée; il semble que le tri personnalisé peut être plus ou moins réalisé en utilisant le $project
function of the aggregation pipeline pour transformer les documents d'entrée avant le tri. Voir aussi la réponse d'Ari.
Je ne pense pas que ce soit possible directement; le sort documentation ne mentionne certainement aucun moyen de fournir une fonction de comparaison personnalisée.
Vous feriez probablement mieux de faire le tri dans le client, mais si vous êtes vraiment déterminé à le faire sur le serveur, vous pouvez utiliser db.eval()
pour organiser le tri sur le serveur (si votre client le soutient).
tri côté serveur:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
Versus l'équivalent tri côté client:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
Notez qu'il est également possible de trier par un aggregation pipeline et par le $orderby
operator (en plus de .sort()
) Cependant, aucun de ces moyens ne vous permet de fournir une fonction de tri personnalisée.
Je suis en cours d'exécution dans le même problème. Avez-vous trouvé un moyen d'accomplir cela du côté du serveur? Je préfère vraiment ne pas avoir à faire cela sur le client, ou ajouter le champ supplémentaire. –