加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

多个聚合和展开 – 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"))
);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读