2016-06-08 3 views
1

Я хотел бы, чтобы преобразовать часть этого запроса MongoDB:Преобразовать Монго с MongoTemplate (весна)

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

С агрегатного метода от MongoTemplate (с пружиной).

Моя проблема с интервалом собственности. Я хотел бы вернуть список инструментов с интервалом в одну минуту.

Я пробовал много решений, но я не могу решить часть:

      "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") 
    ); 

Можете ли вы мне помочь?

Благодаря

ответ

0

Вы можете попробовать проецирование поля интервала первым с помощью SpEL andExpression в операции проекции, а затем группу по новым направлениям в работе группы:

// 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

Я не знать, если мы можем оптимизировать это:

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") 
    ); 

Но это работает

Смежные вопросы