2016-11-24 3 views
0

Ich versuche, die Aggregation Framework in Spring-Daten MongoDB verwenden, um die folgende Abfrage in Java zu erstellen. Die Dokumentation zur Aggregation ist ziemlich schlecht.Push mehr als ein Element in einer Gruppe mit Push

Wie kann ich drehen Sie den DSL in dieser Abfrage

{$unwind : "$item"}, 
{$unwind : "$item.itemSubSection"}, 
{$unwind : "$item.itemSubSection.itemProperties"}, 
{$match : { 
    "item.itemSubSection.itemProperties.itemName" : {$nin: ["someItem", 
     "someOtherItem"]}} 
    }, 
    {$match : {"item.itemSubSection.itemProperties.someProperty" : {$exists : true}}}, 
{$group : 
    { _id: "$_id", 
     itemId: {$first : "$itemId"}, 
     name : {$first : "$name"}, 
     version : {$first : "$version"}, 
     itemData: {$push : {label : "$item.itemSubSection.itemProperties.data.someData", 
     userValue : "$item.itemSubSection.itemProperties.itemValue"}}, 
     createdDateTime : {$first : "$createdDatetime"} 
    }} 

Insbesondere dieser Teil

  itemData: {$push : {label : "$item.itemSubSection.itemProperties.data.someData", 
     value: "$item.itemSubSection.itemProperties.itemValue"}} 

push() scheint nur, damit Sie ein Element hinzufügen? Die In-Code-Dokumentation ist grundsätzlich nicht vorhanden.

Die Ausgabe dieser Abfrage in der Schale für diesen Abschnitt ist:

"itemData" : [ 
    { 
     "label" : "xxyyy", 
     "value" : "123456789012" 
    }, 
    { 
     "label" : "tttyyyyy", 
     "value" : "234DGD" 
    }, 
    { 
     "label" : "sdfsfsdf", 
     "value" : "TR" 
    }] 

Vielen Dank im Voraus

Antwort

1

Sie die BasicDBObject einen der Aggregationsstufe passieren können.

Aggregation agg = newAggregation(
      group("somegroup"). 
      push(new BasicDBObject 
       ("label", "$item.itemSubSection.itemProperties.data.someData").append 
       ("value", "$item.itemSubSection.itemProperties.itemValue")) 
       .as("itemData")); 
+0

Großartig, vielen Dank für Ihre Hilfe! –