如何在Mongodb中使用$ add aggregate?

时间:2015-12-10 22:07:35

标签: mongodb aggregation-framework

我有一个存储员工数据的集合。这是集合“员工”的文档结构。

{
    "emp_id" : 3,
    "Employee_Name" : "Farquleet Shadab",
    "Employee_Gender" : "Male",
    "Employee_Salary" : [
        {
            "month_year" : "Jan-2015",
            "salary_paid" : 100

        },
        {
            "month_year" : "Feb-2015",
            "salary_paid" : 100
        }
    ]
},

{
    "emp_id" : 4,
    "Employee_Name" : "John Robert",
    "Employee_Gender" : "Male",
    "Employee_Salary" : [
        {
            "month_year" : "Jan-2015",
            "salary_paid" : 200

        },
        {
            "month_year" : "Feb-2015",
            "salary_paid" : 200
        }
    ]
}

现在我想写一个查询来查找在month_year ='Jan-2015'中支付给员工的总薪水。我是Mongodb的新手,不知道如何编写查询。

2 个答案:

答案 0 :(得分:2)

这是一个聚合示例:

db.salary.aggregate([
    {
        $unwind: "$Employee_Salary"
    }
    ,{
        $match:
        {
            "Employee_Salary.month_year" : "Jan-2015"
        }
    }
    ,{
        $group:
        {
            _id:null,
            total: { $sum: "$Employee_Salary.salary_paid" }
        }
    }
])

$unwind会爆炸您的数组,为每个数组创建不同的文档。然后,$match将只保留匹配的月份。最后,$group将添加剩下的文档中的所有薪水。

注意:_id不是必需的,但如果你想知道每个例子每月的工资是多少,你只需要删除$ match doc,然后进入$group set { {1}}。

答案 1 :(得分:1)

您可以尝试:

db.collection.aggregate([
    {$unwind: "$Employee_Salary"},
    {$match: {"Employee_Salary.month_year": "Jan-2015" }},
    {$project: {salary_paid: "$Employee_Salary.salary_paid"}},
    {$group: {_id: null, total_salary_paied_on_jan_2015: {$sum: "$salary_paid"}}}
])

此汇总查询将计算2015年1月向所有员工支付的工资总额。