gpt4 book ai didi

mongodb - Mongo 按条件分组和计数

转载 作者:可可西里 更新时间:2023-11-01 10:00:17 26 4
gpt4 key购买 nike

我有这样的数据,我想做的是通过按性别对员工进行分组来统计员工。

{
_id: ObjectId("57fd6b064a8d7733079d1bb9"),
name: "Alex",
age: 23,
position: "Manager",
employees: [{
_id: ObjectId("58056e62281b7a73dfdb6887"),
employee_id: ObjectId("57df832364efef57c3540610"),
name: "Bob",
age: 20,
gender: "Male",
position: "Distributor"
}, {
_id: ObjectId("58049fe7bc82e44583c52a64"),
employee_id: ObjectId("57df830264efef57c354060d"),
name: "Cindy",
age: 19,
gender: "Female",
position: "Administrator"
}, {
_id: ObjectId("58049fe7bc82e44583c52a64"),
employee_id: ObjectId("57df830264efef57c354060d"),
name: "Dylan",
age: 21,
gender: "Male",
position: "Engineer"
}]
}

所以,我想要的数据是这样的

{
_id: ObjectId("57fd6b064a8d7733079d1bb9"),
name: "Alex",
age: 23,
position: "Manager",
male_employees: 2,
female_employees: 1,
}

我已经尝试过聚合,但仍然与我想要的相去甚远。我不知道如何将它们分组并同时使用大小

最佳答案

在您的聚合管道中,您不需要对文档进行分组,只需使用单个 $project 投影您想要的字段即可 管道,你需要使用 $size $filter 组合根据性别获取员工数量,无需使用 $unwind

$filter 部分等式将根据给定条件过滤掉数组元素,在本例中为二元性别值。 <强> $size 运算符随后将返回过滤后的数组的长度,从而为您提供员 worker 数。

让我们看一个例子:

var count = function(gender){
return {
"$size": {
"$filter": {
"input": "$employees",
"as": "emp",
"cond": { "$eq": [ "$$emp.gender", gender ] }
}
}
}
};
db.collection.aggregate([
{
"$project": {
"name": 1,
"age": 1,
"position": 1,
"male_employees": count("Male"),
"female_employees": count("Female")
}
}
]);

示例输出

{
"_id" : ObjectId("57fd6b064a8d7733079d1bb9"),
"name" : "Alex",
"age" : 23,
"position" : "Manager",
"male_employees" : 2,
"female_employees" : 1
}

关于mongodb - Mongo 按条件分组和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40215129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com