多个聚合和展开 – Spring数据Mongodb
发布时间:2020-12-14 04:50:42 所属栏目:百科 来源:网络整理
导读:我有一个mongo查询,用于展开四个对象数组并根据匹配条件过滤数据.我如何在 Spring数据mongodb中执行相同的操作 我曾经使用单一展开,但找不到任何多次展开和匹配操作. db.generator.aggregate([{ $unwind :'$eCList'},{ $unwind :'$pcList'},{ $unwind :'$cit
我有一个mongo查询,用于展开四个对象数组并根据匹配条件过滤数据.我如何在
Spring数据mongodb中执行相同的操作
我曾经使用单一展开,但找不到任何多次展开和匹配操作. db.generator.aggregate([ { $unwind :'$eCList'},{ $unwind :'$pcList'},{ $unwind :'$cityList'},{ $unwind :'$eATypeList'},{ $match : {'eCList.eCCode': { $eq : 'enccode1'} }},{ $match : {'pcList.pcCode': { $eq : 'pccode1'} }},{ $match : {'cityList.cityCode': { $eq : 'citycode1'} }},{ $match : {'eATypeList.eATypeCode': { $eq : 'eATypeCode1'} }},{ $project : {generatorData : '$generatorData',pcList:'$pcList',generatorCode: '$generatorCode',eCId : '$eCList.eCId',eCCode : '$eCList.eCCode',eCKey : '$eCList.eCKey' } } ]) 解决方法
您可以在1.10.x spring mongo版本中尝试以下聚合.
Aggregation aggregation = Aggregation.newAggregation( Aggregation.unwind("eCList"),Aggregation.unwind("pcList"),Aggregation.unwind("cityList"),Aggregation.unwind("eATypeList"),Aggregation.match(Criteria.where("eCList.eCCode").is("enccode1")),Aggregation.match(Criteria.where("pcList.pcCode").is("pccode1")),Aggregation.match(Criteria.where("cityList.cityCode").is("citycode1")),Aggregation.match(Criteria.where("eATypeList.eATypeCode").is("eATypeCode1")),Aggregation.project("generatorData","pcList","generatorCode"). andInclude(Aggregation.bind("eCId","eCList.eCId")). andInclude(Aggregation.bind("eCCode","eCList.eCCode")). andInclude(Aggregation.bind("eCKey","eCList.eCKey")) ); List<BasicDBObject> results = mongoTemplate.aggregate( aggregation,"generator",BasicDBObject.class).getMappedResults(); 生成的Shell查询: { "aggregate":"__collection__","pipeline":[ {"$unwind":"$eCList"},{"$unwind":"$pcList"},{"$unwind":"$cityList"},{"$unwind":"$eATypeList"},{"$match":{"eCList.eCCode":"enccode1"}},{"$match":{"pcList.pcCode":"pccode1"}},{"$match":{"cityList.cityCode":"citycode1"}},{"$match":{"eATypeList.eATypeCode":"eATypeCode1"}},{"$project":{ "generatorData":1,"pcList":1,"generatorCode":1,"eCId":"$eCList.eCId","eCCode":"$eCList.eCCode","eCKey":"$eCList.eCKey"}} ] } 使用静态导入 import org.springframework.data.mongodb.core.query.Criteria; import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; Aggregation aggregation = newAggregation( unwind("eCList"),unwind("pcList"),unwind("cityList"),unwind("eATypeList"),match(where("eCList.eCCode").is("enccode1")),match(where("pcList.pcCode").is("pccode1")),match(where("cityList.cityCode").is("citycode1")),match(where("eATypeList.eATypeCode").is("eATypeCode1")),project("generatorData","generatorCode"). andInclude(bind("eCId","eCList.eCId")). andInclude(bind("eCCode","eCList.eCCode")). andInclude(bind("eCKey","eCList.eCKey")) ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读