2011-04-23 2 views

Répondre

3

OK Je l'ai trouvé :-)

dataStore.find(MyClass.class).order("-inner_array.length").asList();
le tour est joué.

+3

Je suis sûr que cette requête ne fonctionne pas réellement. Il peut s'exécuter sans donner d'erreur, mais quand j'essaie quelque chose de similaire dans le shell mongo, rien n'est vraiment trié. –

+0

Ne fonctionne pas ... – Antoine

4

Vous devez créer un champ supplémentaire avec une taille de tableau imbriquée et utiliser $inc pour mettre à jour ce champ.

Vous pouvez également utiliser $where, mais très lent.

Recherche Vous par la longueur du tableau imbriqué comme ceci:

db.coll.find({ $where: "this.nestedArray.length > 3" }); 

Mais comme je l'ai dit mieux pour créer un champ supplémentaire.

+0

Merci Andrew, mais ce n'est pas ce que je cherche. J'utilise Morphia comme mappeur POJO, donc je ne veux pas ajouter de champs non pertinents. de toute façon tous les tableaux javascript ont une propriété de longueur. Je me demande s'il existe un moyen de l'utiliser dans une requête. – tsinik

+1

Non, il n'y a aucun moyen de faire cela; il n'y a pas de support pour le tri par une fonction et il n'y a pas de champ synthétique qui soit la longueur du tableau. Cela signifie que pour l'instant vous devez stocker un nombre si vous voulez l'incorporer et le trier. Faites attention à la manière dont vous le mettez à jour. –

0

par exemple:

source de données tmb_results_by_tissue_other:

{"base_info":[1,2,3],"type":"123"}, 
{"base_info":[2,3,4,5],"type":"123"}, 

par agrégat

db.tmb_results_by_tissue_other.aggregate([{$project:{"type":1, num:{$size:"$base_info"}}},{$sort:{"num":-1}}]) 
Questions connexes