1

Мне сложно определить, как написать реализацию данных весны для следующего запроса агрегации. Некоторые фоне моей проблемы можно найти hereSpring Data эквивалент запроса агрегирования

db.asset.aggregate([{$unwind:"$folderIds"}, {$group:{_id: "$folderIds",assets:{$push: {assets_id:"$_id",display_name:"$displayName"}}}}]) 

у меня ниже фрагмент кода до сих пор

AggregationOperation unwind = Aggregation.unwind("folderIds"); 
AggregationOperation groupFolderIds = Aggregation.group("folderIds") 
      .push(new BasicDBObject().put("assetId", "$_id")).as("assets"); 
Aggregation aggregation = Aggregation.newAggregation(unwind, groupFolderIds); 
AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "asset", Map.class); 

Я знаю, что аргумент .С() должна быть установлена, но я не» не знаю как. В результате я хотел бы извлечь несколько полей из документа активов. Помощь приветствуется. Спасибо.

ответ

2

Если вы подачи BasicDBObject к $push затем использовать метод .append, чтобы добавить дополнительные поля:

Aggregation aggregation = newAggregation(
      unwind("folderIds"), 
      group("folderIds") 
       .push(
        new BasicDBObject("assets_id","$_id") 
        .append("display_name","$displayName") 
       ).as("assets") 
    ); 

Также следует обратить внимание при использовании «напечатал» вывод, тип класса, который вы используете, должен соответствовать структуре " output ", а не класс" input ", который используется, поскольку они, конечно, будут разными.

+0

Спасибо, это сработало. У вас есть пример использования «типизированного» класса вывода? Например, если я хочу использовать AssetStats.java, как это должно выглядеть? –

+0

На самом деле я понял, как использовать «типизированный» выход. Последняя строка в приведенном выше java-коде должна выглядеть так: AggregationResults results = mongoTemplate.aggregate (агрегация, «актив», AssetStats.class); –

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