MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Tri complexe de Mongo ?

MISE À JOUR : Cette réponse semble être obsolète; il semble que le tri personnalisé puisse être plus ou moins réalisé en utilisant le $project fonction du pipeline d'agrégation pour transformer les documents d'entrée avant le tri. Voir aussi la réponse de @Ari.

Je ne pense pas que ce soit possible directement; la documentation de tri 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 pourrez peut-être utiliser db.eval() pour organiser l'exécution du tri sur le serveur (si votre client le prend en charge).

Tri côté serveur :

db.eval(function() { 
  return db.scratch.find().toArray().sort(function(doc1, doc2) { 
    return doc1.a - doc2.a 
  }) 
});

Versus le tri équivalent côté client :

db.scratch.find().toArray().sort(function(doc1, doc2) { 
  return doc1.a - doc2.b 
});

Notez qu'il est également possible de trier via un pipeline d'agrégation et par le $orderby opérateur (c'est-à-dire en plus de .sort() ), mais aucune de ces méthodes ne vous permet non plus de fournir une fonction de tri personnalisée.