mongodb单表百亿_vue拖拽表单生成器

mongodb单表百亿_vue拖拽表单生成器上一篇笔记仅是记录了一下简单的关联查询,根据笔记中的场景:将某一车辆关联的耗损记录全部放在了一个字段当中。不知道现在中有没有这种场景,我们的应用中没有类似的场景,可能我们更关注的是某车辆的总耗损金额和

  上一篇笔记仅是记录了一下简单的关联查询,根据笔记中的场景:将某一车辆关联的耗损记录全部放在了一个字段当中。不知道现在中有没有这种场景,我们的应用中没有类似的场景,可能我们更关注的是某车辆的总耗损金额和总营收金额、总里程数等,因此这篇笔记记录一下怎么得到这些数据。要想获取这些记录我们首先想到的就是先按照车辆ID分组之后再对指定字段求和,可能是先入为主的原因(有了上一篇笔记),我没有按照传统的思路走下去,而是想着看看能不能在上一篇笔记的基础之上得到想要的结果。

  我们沿着这条路在分析一下,车辆相关的耗损和营收都可以放到一个字段中。也就是说我们不用分组了,车辆相关的耗损和营收记录都冗余到了车辆信息记录中,那么接下来就是对数组中的某一字段或者多个进行求和了……查了半天并没有找到类似$sum这样的聚合管道可以对数组中的字段求和,不过得益于mongodb管道的强大,用另外一个管道间接实现了这个功能。

db.getCollection("FormInstace").aggregate([
    {
        $match: {
            "_id": { $in: ["1","2","3"] },
            "FormItems.key": { $ne: null }
        }
    },
    {
        $addFields: {
            FormValueObj: {
                $arrayToObject: {
                    $map: {
                        input: "$FormItems",
                        as: "field",
                        in: [ "$$field.key", "$$field.value" ]
                    }
                }
            }
        }
    },
    {
      $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
    },
    {
        $project: {
            FormItems:0,
            FormValueObj:0
        }
    },
    {   
        $lookup:{
            from:"FormInstace",
            let: { tempMainRelationKey: "$_id" },
            pipeline:[
                {
                    $match: { 
                        FormId: "507048044944692000",
                        "FormItems.key": { $ne: null }                        
                    }
                },
                {
                    $addFields: {
                        FormValueObj: {
                            $arrayToObject: {
                                $map: {
                                    input: "$FormItems",
                                    as: "field",
                                    in: [ "$$field.key", "$$field.value" ]
                                }
                            }
                        }
                    }
                },
                {
                  $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
                },
                {
                    $project: {
                        FormItems:0,
                        FormValueObj:0
                    }
                },
                { $match:
                     { $expr:
                            { $eq: [ "$1572493552001.id","$$tempMainRelationKey" ] }
                     }
                },
            ],
            as:"carWastage"
        }
    },
    {   
        $lookup:{
            from:"FormInstace",
            let: { tempMainRelationKey: "$_id" },
            pipeline:[
                {
                    $match: { 
                        FormId: "507048044944693000",
                        "FormItems.key": { $ne: null }                        
                    }
                },
                {
                    $addFields: {
                        FormValueObj: {
                            $arrayToObject: {
                                $map: {
                                    input: "$FormItems",
                                    as: "field",
                                    in: [ "$$field.key", "$$field.value" ]
                                }
                            }
                        }
                    }
                },
                {
                  $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
                },
                {
                    $project: {
                        FormItems:0,
                        FormValueObj:0
                    }
                },
                { $match:
                     { $expr:
                            { $eq: [ "$1572493553001.id","$$tempMainRelationKey" ] }
                     }
                },
            ],
            as:"carRevenue"
        }
    },
    {
        $addFields: {
            carWastageStatistics: {
               $reduce: {
                  input: "$carWastage",
                  initialValue: {wastageMoney:0},
                  in: {
                      wastageMoney:{ $add : ["$$value.wastageMoney", "$$this.1572493552005"] }
                  }
               }
            }
        }
    },
    {
        $addFields: {
            carRevenueStatistics: {
               $reduce: {
                  input: "$carRevenue",
                  initialValue: {revenueMoney:0,mileage:0},
                  in: { 
                    revenueMoney:{$add : ["$$value.revenueMoney", "$$this.1572493553005"]},
                    mileage:{$add : ["$$value.mileage", "$$this.1572493553006"]}
                  }
               }
            }
        }
    }
]);

代码100分

mongodb单表百亿_vue拖拽表单生成器

  这次统计查询就查出了某些车辆的总耗损金额和总营收金额、总里程数;只不过将结果放到对象中了(方便统计一个表中的多个字段),但是现在看不到具体的结果,将代码在修改一下,看一下结果

代码100分db.getCollection("FormInstace").aggregate([
    {
        $match: {
            "_id": { $in: ["1","2","3"] },
            "FormItems.key": { $ne: null }
        }
    },
    {
        $addFields: {
            FormValueObj: {
                $arrayToObject: {
                    $map: {
                        input: "$FormItems",
                        as: "field",
                        in: [ "$$field.key", "$$field.value" ]
                    }
                }
            }
        }
    },
    {
      $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
    },
    {
        $project: {
            FormItems:0,
            FormValueObj:0
        }
    },
    {   
        $lookup:{
            from:"FormInstace",
            let: { tempMainRelationKey: "$_id" },
            pipeline:[
                {
                    $match: { 
                        FormId: "507048044944692000",
                        "FormItems.key": { $ne: null }                        
                    }
                },
                {
                    $addFields: {
                        FormValueObj: {
                            $arrayToObject: {
                                $map: {
                                    input: "$FormItems",
                                    as: "field",
                                    in: [ "$$field.key", "$$field.value" ]
                                }
                            }
                        }
                    }
                },
                {
                  $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
                },
                {
                    $project: {
                        FormItems:0,
                        FormValueObj:0
                    }
                },
                { $match:
                     { $expr:
                            { $eq: [ "$1572493552001.id","$$tempMainRelationKey" ] }
                     }
                },
            ],
            as:"carWastage"
        }
    },
    {   
        $lookup:{
            from:"FormInstace",
            let: { tempMainRelationKey: "$_id" },
            pipeline:[
                {
                    $match: { 
                        FormId: "507048044944693000",
                        "FormItems.key": { $ne: null }                        
                    }
                },
                {
                    $addFields: {
                        FormValueObj: {
                            $arrayToObject: {
                                $map: {
                                    input: "$FormItems",
                                    as: "field",
                                    in: [ "$$field.key", "$$field.value" ]
                                }
                            }
                        }
                    }
                },
                {
                  $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
                },
                {
                    $project: {
                        FormItems:0,
                        FormValueObj:0
                    }
                },
                { $match:
                     { $expr:
                            { $eq: [ "$1572493553001.id","$$tempMainRelationKey" ] }
                     }
                },
            ],
            as:"carRevenue"
        }
    },
    {
        $addFields: {
            carWastage_Money: {
               $reduce: {
                  input: "$carWastage",
                  initialValue: 0,
                  in: { $add : ["$$value", "$$this.1572493552005"] }
               }
            }
        }
    },
    {
        $addFields: {
            carRevenue_Money: {
               $reduce: {
                  input: "$carRevenue",
                  initialValue: 0,
                  in: { $add : ["$$value", "$$this.1572493553005"] }
               }
            }
        }
    },
    {
        $addFields: {
            carRevenue_Mileage: {
               $reduce: {
                  input: "$carRevenue",
                  initialValue: 0,
                  in: { $add : ["$$value", "$$this.1572493553006"] }
               }
            }
        }
    }
]);

mongodb单表百亿_vue拖拽表单生成器

  这样就一目了然了。统计结果对不对呢?我们用传统的分组之后再求和在查询一下,将结果做一下对比(顺便记录一下,分组求和)

mongodb单表百亿_vue拖拽表单生成器

db.getCollection("FormInstace").aggregate([
    {
        $match: {
            "FormId":"507048044944692000",
            "FormItems.key": { $ne: null }
        }
    },
    {
        $addFields: {
            FormValueObj: {
                $arrayToObject: {
                    $map: {
                        input: "$FormItems",
                        as: "field",
                        in: [ "$$field.key", "$$field.value" ]
                    }
                }
            }
        }
    },
    {
        $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
    },
    {
        $match: {
            "1572493552001.id": { $in:["1","2","3"]}
        }
    },
    {
        $project: {
            FormItems:0,
            FormValueObj:0
        }
    },
    {
        $group:{
           _id: "$1572493552001.id",
           wastageMoney: { $sum: "$1572493552005"}
        }
    },
    { $sort : { _id: 1 } }
]);

统计指定车辆的耗损总额

mongodb单表百亿_vue拖拽表单生成器

代码100分db.getCollection("FormInstace").aggregate([
    {
        $match: {
            "FormId":"507048044944693000",
            "FormItems.key": { $ne: null }
        }
    },
    {
        $addFields: {
            FormValueObj: {
                $arrayToObject: {
                    $map: {
                        input: "$FormItems",
                        as: "field",
                        in: [ "$$field.key", "$$field.value" ]
                    }
                }
            }
        }
    },
    {
        $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
    },
    {
        $match: {
            "1572493553001.id": { $in:["1","2","3"]}
        }
    },
    {
        $project: {
            FormItems:0,
            FormValueObj:0
        }
    },
    {
        $group:{
           _id: "$1572493553001.id",
           wastageMoney: { $sum: "$1572493553005"},
           mileage: { $sum: "$1572493553006"}
        }
    },
    { $sort : { _id: 1 } }
]);

统计指定车辆的营收总额和里程数

mongodb单表百亿_vue拖拽表单生成器

  对比两次查询结果,两次不同的统计方式的结果相同。这样就放心了。好了就到这里了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11028.html

(0)
上一篇 2022-12-17
下一篇 2022-12-17

相关推荐

  • Python中%s的含义

    Python中%s的含义Python作为一门高级编程语言,拥有丰富的语法和内置函数,其中用到了%s这个概念。在Python中, %s是一种字符串格式化操作符,用于将不同类型的数据转换为字符串并以指定的格式输出。

    2024-07-02
    39
  • Python Class用于面向对象编程

    Python Class用于面向对象编程Python是一种简单易学的高级编程语言,常用于数据分析、机器学习、人工智能等领域。Python是一种面向对象的编程语言,具有强大的面向对象编程特性。Python中的Class是实现面向对象编程的重要组成部分,一个Class可以包含多个属性和方法,可以用来创建对象。下面将从多个方面对Python Class用于面向对象编程进行详细的阐述。

    2024-03-23
    81
  • MySQL必知存储引擎「建议收藏」

    MySQL必知存储引擎「建议收藏」Mysql存储引擎 1.MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务. 2.InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁

    2022-12-30
    166
  • DB审核查询平台Archery-「建议收藏」

    DB审核查询平台Archery-「建议收藏」Archery介绍 Archery是archer的分支项目,定位于SQL审核查询平台,旨在提升DBA的工作效率,支持多数据库的SQL上线和查询,同时支持丰富的MySQL运维功能,所有功能都兼容手机端操

    2023-05-08
    143
  • mycat读写分离方案一

    mycat读写分离方案一1.什么是MYCAT 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 …

    2023-02-17
    145
  • sqlplus: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory「建议收藏」

    sqlplus: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory「建议收藏」在Zabbix Server服务器上安装oracle-instantclient11.2后,结果使用sqlplus命令时遇到“sqlplus: error while loading shared l

    2023-03-26
    162
  • VLDB’22 HiEngine极致RTO论文解读「建议收藏」

    VLDB’22 HiEngine极致RTO论文解读「建议收藏」摘要:《Index Checkpoints for Instant Recovery in In-Memory Database Systems》是由华为云数据库创新Lab一作发表在数据库领域顶级会议

    2023-06-04
    149
  • 捉虫子百科_点点点绘本

    捉虫子百科_点点点绘本TiDB 4.0 RC 版本 已经发布,很多小伙伴已经跃跃欲试想要体验新功能了,这里有一个“一边体验一边拿周边”的好机会哦。 TiDB 4.0 捉“虫”竞赛来袭,本次竞赛将持续到 5 月 30 日,…

    2023-02-17
    147

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注