2017-10-12 1 views
0

Ich versuche, die Anzahl der Elemente in einer Liste jedes Dokuments in einer Sammlung zu zählen, ähnlich wie im folgenden Beispiel. (https://docs.mongodb.com/manual/reference/operator/aggregation/size/#exp._S_size)Morphia Aggregationsabfrage, um die Größe der Liste zu erhalten

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

Diese Abfrage würde zurückkehren Größe Liste "Farben" in jedem Dokument.

Eine äquivalente Morphium Abfrage würde wie folgt sein:

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

Fehler bei der Ausführung von oben: java.lang.String kann nicht auf com.mongodb.DBObject gegossen werden
Ich bin nicht in der Lage auf ein Äquivalent zu kommen Morphia-Abfrage, um dasselbe zu erreichen.
Jede Hilfe in dieser Hinsicht würde sehr geschätzt werden.

+0

Mögliches Duplikat von [Was ist der korrekte Weg, um Operatoren in Mongo-Aggregationspipelines mit Morphia zu verwenden] (https://stackoverflow.com/questions/45214057/what-is-the-correct-way-to-use-operators -in-mongo-aggregation-pipelines-with-mor) – Veeram

+0

Ich habe die genannten Lösungen ausprobiert, aber vergebens. –

Antwort

0

Haben Sie versucht,

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

mit Dollar vor Farben?

+0

Ich habe gerade mit $ versucht, und endete Fehler zu bekommen: java.lang.String kann nicht in com.mongodb.DBObject umgewandelt werden –

Verwandte Themen