2016-06-08 17 views
1

Ich mag würde einen Teil dieser mongodb Anfrage konvertieren:Convert Mongo Anfrage mit MongoTemplate (Feder)

{ 
     "$group": { 
       "_id": { 
         "instrument_name": "$instrument_name", 
         "interval":{ 
          "$minute":{ 
            $add:[new Date("1970-01-01"), "$date"] 
          } 
         } 
       } 
     } 
} 

Mit dem Aggregat Methode von MongoTemplate (mit Feder).

Mein Problem ist mit der Intervall-Eigenschaft. Ich möchte eine Liste von Instrumenten in einem Zeitintervall von einer Minute zurückgeben.

Ich habe versucht, viele Lösungen, aber ich kann das Teil nicht lösen:

      "interval":{ 
          "$minute":{ 
            $add:[new Date("1970-01-01"), "$date"] 
          } 
         } 



Aggregation aggregation = Aggregation.newAggregation(
     Aggregation.match(Criteria.where("instrument_name").in(instruments)), 
     Aggregation.group("instrumentName", ???)), 
     Aggregation.project().andExpression("instrumentName").as("instrument_name") 
    ); 

Können Sie mir helfen?

Dank

Antwort

0

Sie könnten versuchen, das Intervall-Feld unter Verwendung der durch die neuen Felder in der Gruppe Betrieb SpEL andExpression im Projektionsbetrieb und dann die Gruppe ersten vorstehenden:

// define epochDate here e.g DateTime epochDate = ... 
Aggregation agg = newAggregation(
    match(Criteria.where("instrument_name").in(instruments)), 
    project("instrument_name").and("date").plus(epochDate).as("interval"), 
    group(fields().and("instrument_name").and("interval")).count().as("count") 
); 
0

ich nicht wissen, ob wir diese optimieren können:

TypedAggregation<InstrumentModel> aggregation = Aggregation.newAggregation(InstrumentModel.class, 
     Aggregation.match(Criteria.where("instrument_name").in(instruments)), 
     Aggregation.project().and("instrumentName").as("instrument_name").and("time").plus(epoch).extractMinute().as("interval"), 
     Aggregation.group(Fields.fields().and("instrument_name").and("interval")).count().as("ticks") 
    ); 

Aber es funktioniert