mongodb合并多个数组字段 并对数组里一个对象的属性进行分组统计

需求,有五个数组字段,数组里面是一个个对象,对象有一个相同的属性字段,对该字段分组:
在这里插入图片描述
结果:
在这里插入图片描述
aggregate语句:

db.tablename.aggregate()
    .match({companyName:{$in:["xxxxxxxxxxx"]}})
    .project({"influenceRisks.riskPoint": 1,"incomeRisks.riskPoint":1, "complaintRisks.riskPoint": 1,"adverRisks.riskPoint":1,"illegalRisks.riskPoint":1})
    //$setUnion 把多个字段组合成一个之后再unwind
    .project({risks: {$setUnion: ["$influenceRisks","$incomeRisks","$complaintRisks","$adverRisks","$illegalRisks"]}})
    .project({"risks":"$risks.riskPoint"})
    .unwind("$risks")
    .group({
          _id: "$risks",
          count: { $sum: 1}
    })
    .sort({"count": -1})
    .limit(40)
db.tablename.aggregate(
[{ "$match" : { "companyName" : { "$in" : ["xxxxxxxxxx"] } } }, 
{ "$project" : 
{'influenceRisks.riskPoint': 1,'incomeRisks.riskPoint':1, 'complaintRisks.riskPoint': 1,'adverRisks.riskPoint':1,'illegalRisks.riskPoint':1,
risks: {$setUnion: ['$influenceRisks','$incomeRisks','$complaintRisks','$adverRisks','$illegalRisks']},
"risk":"$risks.riskPoint"}},
{ "$unwind" : "$risk" }, { "$group" : { "_id" : "$risk", "count" : { "$sum" : 1 } } }, { "$sort" : { "count" : -1 } },{ "$limit" : 40 }]
)

mongoTemplate 的api没有组装出来,然后…
很不优雅

    private static String pipline = "{aggregate: 'tablename', pipeline:[{ '$match' : { 'companyName' : { '$in' : ['nameStr'] } } }, \n" +
            "{ '$project' : \n" +
            "{'influenceRisks.riskPoint': 1,'incomeRisks.riskPoint':1, 'complaintRisks.riskPoint': 1,'adverRisks.riskPoint':1,'illegalRisks.riskPoint':1,\n" +
            "risks: {$setUnion: ['$influenceRisks','$incomeRisks','$complaintRisks','$adverRisks','$illegalRisks']},\n" +
            "'risk':'$risks.riskPoint'}},\n" +
            "{ '$unwind' : '$risk' }, { '$group' : { '_id' : '$risk', 'count' : { '$sum' : 1 } } }, { '$sort' : { 'count' : -1 } },{ '$limit' : 50 }]}";
 //todo 传参进去把nameStr替换调
 Document document = mongoTemplate.executeCommand(pipline)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值