gpt4 book ai didi

javascript - mongodb中如何按多个字段聚合

转载 作者:行者123 更新时间:2023-12-02 16:35:35 27 4
gpt4 key购买 nike

我想按 2 个字段进行聚合,并希望以嵌套方式完成分组。我该如何实现它?目前我按以下方式进行分组

var query = [
{ '$group': {
'_id': {
'employee': '$employee',
'sector': '$sector'
},
'bookCount': { '$sum': 1 }
}},
{ '$sort': { 'count': -1 } }
];

Order.aggregate(query, function(err, results){
res.json(results)
});

我希望结果采用以下形式

{abc:{sector1:4, sector3:5}, xyz: {sector1:10, sector2:23}}

其中 abc、xyz 是雇员,sector1、sector2 是部门。

如何聚合以获得嵌套结果?

我的原始文档是

[
{
"sector": "sector1",
"employee": "xyz"
},
{
"sector": "sector1",
"employee": "abc"
},
{
"sector": "sector1",
"employee": "abc"
},
{
"sector": "sector2",
"employee": "abc"
}
]

我希望结果采用以下形式

{abc:{sector1:2,sector2:2}, xyz: {sector1:1}}

最佳答案

您不能在聚合框架中使用“数据”作为“键名称”,也不能创建具有嵌套属性的嵌套对象。您也不应该这样做,因为这是一种“反模式”。数据就是数据,并且应该保持这种状态。另外,还有更好的方法可以做到这一点:

Order.aggregate([
{ "$group": {
"_id": {
"employee": "$employee",
"sector": "$sector"
},
"count": { "$sum": 1 }
}},
{ "$group": {
"_id": "$_id.employee",
"sectors": {
"$push": {
"sector": "$_id.sector",
"count": "$count"
}
}
}}
],function(err,docs) {

});

它返回这样的结构:

[
{
"_id" : "xyz",
"sectors" : [
{
"sector" : "sector1",
"count" : 1
}
]
},
{
"_id" : "abc",
"sectors" : [
{
"sector" : "sector2",
"count" : 1
},
{
"sector" : "sector1",
"count" : 2
}
]
}
]

因此,您有一个“员工”值的主分组键,其他结果将“推送”到数组中。

这是一个更好的结构,在键命名方面具有一致的结果。

关于javascript - mongodb中如何按多个字段聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27961916/

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