2013-07-05 3 views
0

J'essaie d'effectuer une requête sur un MongoDB avec Salat. La requête doit trier le jeu de résultats par deux attributs. Je n'ai trouvé aucun exemple. Le tri avec un seul MongoDBObject fonctionne comme prévu.Trier par multiples attributs avec Salat pour MongoDB

val results = dao 
    .find(MongoDBObject.empty) 
    .sort(orderBy = MongoDBObject("attribute1" -> 1)) 
    .skip(0) 
    .limit(10).toList 

Comment combiner deux MongoDBObjects afin qu'il soit évalué par orderBy? Par exemple si mon tri prioritaire est par attribut1, ascendant et mon tri secondaire par attribut 2, ascendant.

Merci pour votre aide!

Répondre

2

Vous pouvez construire votre objet de tri comme suit:

val sort = MongoDBObject("attribute1" -> 1) ++ ("attribute2" -> -1) 

Et faire la requête:

val results = dao 
    .find(MongoDBObject.empty) 
    .sort(orderBy = sort) 
    .skip(0) 
    .limit(10).toList 
0

Vous pouvez faire le changement suivant:

val results = dao 
    .find(MongoDBObject.empty) 
    .sort(orderBy = MongoDBObject("attribute1" -> 1, "attribute2" -> -1)) 
    .skip(0) 
    .limit(10).toList 

Vous allez maintenant trier avec la priorité sur l'attribut1 dans l'ordre croissant et sur les liens il ira à l'attribut 2 dans l'ordre décroissant. Cela vous permet de tout faire en une ligne au lieu de créer une valeur intermédiaire qui serait requise dans la réponse de concaténation de liste.

Questions connexes