Эквивалент запроса агрегации Spring Data

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

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

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


person Srini Kandula    schedule 15.10.2015    source источник


Ответы (1)


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

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

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

person Blakes Seven    schedule 15.10.2015
comment
Спасибо, это сработало. У вас есть пример использования типизированного выходного класса? Например, если я хочу использовать AssetStats.java, как это должно выглядеть? - person Srini Kandula; 15.10.2015
comment
На самом деле я понял, как использовать типизированный вывод. Последняя строка в приведенном выше Java-коде должна выглядеть следующим образом: - person Srini Kandula; 15.10.2015