mongodb中两个分组值的总和?

mongodb中两个分组值的总和?,mongodb,Mongodb,现在,我如何计算我帐户中的余额金额,如(C)之和-(D)之和=650?对于这种聚合操作类型,十进制操作符将派上用场。您可以使用它来计算给定Tran_Type值的总和,因此您可以将此逻辑注入管道阶段,在该阶段您将对所有文档进行分组(即,按空键分组)。您还需要使用一个操作符来计算与算术操作符的差异 下面的示例将演示此概念。运行管道操作以获得所需的结果: 填充测试文档: Trans_Id Account_Id Amount Tran_Type 1 H

现在,我如何计算我帐户中的余额金额,如(C)之和-(D)之和=650?

对于这种聚合操作类型,十进制操作符将派上用场。您可以使用它来计算给定
Tran_Type
值的总和,因此您可以将此逻辑注入管道阶段,在该阶段您将对所有文档进行分组(即,按空键分组)。您还需要使用一个操作符来计算与算术操作符的差异

下面的示例将演示此概念。运行管道操作以获得所需的结果:

填充测试文档:

Trans_Id      Account_Id     Amount   Tran_Type
   1             HA1001       1000       C
   2             HA1001         50       D
   3             HA1001        100       C
   4             HA1001        400       D
聚合管道:

db.test.insert([
    {
        "Trans_Id": 1,
        "Account_Id": "HA1001",
        "Amount": 1000,
        "Tran_Type": "C"
    },
    {
        "Trans_Id": 2,
        "Account_Id": "HA1001",
        "Amount": 50,
        "Tran_Type": "D"
    },
    {
        "Trans_Id": 3,
        "Account_Id": "HA1001",
        "Amount": 100,
        "Tran_Type": "C"
    },
    {
        "Trans_Id": 4,
        "Account_Id": "HA1001",
        "Amount": 400,
        "Tran_Type": "D"
    }
])
db.test.aggregate([
    {
        "$group": {
            "_id": null,
            "total_C": {
                "$sum": {
                    "$cond": [ 
                        { "$eq": [ "$Tran_Type", "C" ] }, 
                        "$Amount", 0 
                    ]
                }
            },
            "total_D": {
                "$sum": {
                    "$cond": [ 
                        { "$eq": [ "$Tran_Type", "D" ] }, 
                        "$Amount", 0 
                    ]
                }
            }
        }
    },
    {
        "$project": {
            "balance": {
                "$subtract": ["$total_C", "$total_D"]
            }, "_id": 0
        }
    }
])
样本输出:

db.test.insert([
    {
        "Trans_Id": 1,
        "Account_Id": "HA1001",
        "Amount": 1000,
        "Tran_Type": "C"
    },
    {
        "Trans_Id": 2,
        "Account_Id": "HA1001",
        "Amount": 50,
        "Tran_Type": "D"
    },
    {
        "Trans_Id": 3,
        "Account_Id": "HA1001",
        "Amount": 100,
        "Tran_Type": "C"
    },
    {
        "Trans_Id": 4,
        "Account_Id": "HA1001",
        "Amount": 400,
        "Tran_Type": "D"
    }
])
db.test.aggregate([
    {
        "$group": {
            "_id": null,
            "total_C": {
                "$sum": {
                    "$cond": [ 
                        { "$eq": [ "$Tran_Type", "C" ] }, 
                        "$Amount", 0 
                    ]
                }
            },
            "total_D": {
                "$sum": {
                    "$cond": [ 
                        { "$eq": [ "$Tran_Type", "D" ] }, 
                        "$Amount", 0 
                    ]
                }
            }
        }
    },
    {
        "$project": {
            "balance": {
                "$subtract": ["$total_C", "$total_D"]
            }, "_id": 0
        }
    }
])

如果我还有一个列属于类别,例如“Cat1”、“Cat2”,还需要一个帮助。现在我如何才能获得余额类别?HassanAhamed看起来原来的问题已经解决了,不是吗?至于“下一个”问题,那将是一个,考虑单独发布。