Преобразование Mongodb Aggregrate в эквивалент Spring Boot - PullRequest
1 голос
/ 24 октября 2019

У меня есть работающий агрегат:

db.getCollection("policies").aggregate([

                      { $match: { "policyData.QuoteOrPolicy.Policy.RatingStateProvCd.Value": "IL" , "policyData.QuoteOrPolicy.Policy.CompanyProductCd.Value" :  "027" , 
                                         "policyData.QuoteOrPolicy.Policy.InitialDataOrderLineCd.Value"  :   "010" } },

                 { $project:{            "policyData.QuoteOrPolicy.PersAutoLineBusiness.PersAutoVeh.Coverage.CoverageCd": 1        }    }                  ,
                   { $unwind: { path: "$policyData.QuoteOrPolicy", preserveNullAndEmptyArrays: true } } ,
                 { $unwind: { path: "$policyData.QuoteOrPolicy.PersAutoLineBusiness", preserveNullAndEmptyArrays: true } } ,
                 { $unwind: { path: "$policyData.QuoteOrPolicy.PersAutoLineBusiness.PersAutoVeh", preserveNullAndEmptyArrays: true } } ,
                   { $unwind: { path: "$policyData.QuoteOrPolicy.PersAutoLineBusiness.PersAutoVeh.Coverage", preserveNullAndEmptyArrays: true } } ,
                    { $group: { _id: "$policyData.QuoteOrPolicy.PersAutoLineBusiness.PersAutoVeh.Coverage.CoverageCd.Value", count: { $sum: 1 } } },
                    {$group:{"_id":null,"coverage_counts":{$push:{"coverage_value":"$_id",
                                               "count":"$count"}}}},
                    {$project:{"_id":0,"coverage_counts":1}}

             ])

, который работает, как и ожидалось. У меня нет радости получить эквивалентную работу в Spring Boot с использованием его агрегатов поддержки mongodb.

Может ли кто-нибудь "перевести" его. Спасибо за всю информацию.

1 Ответ

0 голосов
/ 24 октября 2019

Вам необходимо ознакомиться с библиотекой org.springframework.data.mongodb.core.aggregation.Aggregation , чтобы лучше понять, как использовать агрегат mongodb внутри весны.

Здесьпример того, как вы могли бы использовать его, используя свой запрос:

mongoOperation.aggregate( Aggregation.newAggregation(
                Aggregation.match( Criteria.where( "policyData.QuoteOrPolicy.Policy.RatingStateProvCd.Value" ).is( "IL" )
                .and( "policyData.QuoteOrPolicy.Policy.CompanyProductCd.Value" ).is( "027" )
                .and( "policyData.QuoteOrPolicy.Policy.InitialDataOrderLineCd.Value" ).is( "010" ) ),
                Aggregation.project().and( "policyData.QuoteOrPolicy" ).as( "QuoteOrPolicy" ),
                Aggregation.unwind( "QuoteOrPolicy", true ),
                Aggregation.unwind( "QuoteOrPolicy.PersAutoLineBusiness", true ),
                Aggregation.unwind( "QuoteOrPolicy.PersAutoLineBusiness.PersAutoVeh", true ),
                Aggregation.unwind( "QuoteOrPolicy.PersAutoLineBusiness.PersAutoVeh.Coverage", true ),
                Aggregation.group( "QuoteOrPolicy.PersAutoLineBusiness.PersAutoVeh.Coverage.CoverageCd.Value" ).count().as( "count" ),
                Aggregation.group().push( new Document( "coverage_value", "$_id" ).append( "count", "$count" ) ).as( "coverage_counts" ),
                Aggregation.project( "coverage_counts" )
             ), "NameOfYourCollection", Document.class );

Класс Document.class в конце может быть заменен для класса, если в нем есть совпадающие поля выходных данных вашего запроса.

...