我有一个存储员工数据的集合。这是集合“员工”的文档结构。
{
"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的新手,不知道如何编写查询。
答案 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月向所有员工支付的工资总额。