2017-10-12 4 views
0

J'essaie de compter le nombre d'éléments dans une liste de chaque document dans une collection, semblable à l'exemple ci-dessous. (https://docs.mongodb.com/manual/reference/operator/aggregation/size/#exp._S_size)requête d'agrégation Morphia pour obtenir la taille de la liste

db.inventory.aggregate(
    [ 
     { 
     $project: { 
      item: 1, 
      numberOfColors: { $size: "$colors" } 
     } 
     } 
    ] 
) 

Cette requête retourneraient taille de la liste dans chaque document "couleurs".

Une requête équivalente morphia serait quelque chose comme ceci:

pipeline = ds.createAggregation(Abc.class) 
       .match(query) 
       .project(Projection.projection("count", 
       Projection.expression("$size","colors"))); 

Erreur sur l'exécution ci-dessus: java.lang.String ne peut pas être jeté à com.mongodb.DBObject
Je ne peux pas arriver à un équivalent requête morphia pour atteindre le même.
Toute aide à cet égard serait grandement appréciée.

+0

Possible duplication de [Quelle est la bonne façon d'utiliser les opérateurs dans les pipelines d'agrégation Mongo avec Morphia] (https://stackoverflow.com/questions/45214057/what-is-the-correct-way-to-use-operators -in-mongo-agrégation-pipelines-with-mor) – Veeram

+0

J'ai essayé les solutions mentionnées dans ce document, mais en vain. –

Répondre

0

Avez-vous essayé

Projection.expression("$size","$colors"))); 

Avec dollar avant les couleurs?

+0

J'ai juste essayé avec $, et j'ai fini par avoir une erreur: java.lang.String ne peut pas être converti en com.mongodb.DBObject –