gpt4 book ai didi

mongodb - 如何在 mongodb $group 之后使用新键将数据再次分组到单个对象中?

转载 作者:可可西里 更新时间:2023-11-01 10:50:03 25 4
gpt4 key购买 nike

我有一个 mongodb 数据库,其中包含看起来像这样的公司集合(这只是一个示例,实际集合要大得多):

[
{
"_id": 100,
"name": "Test Name 1",
"level": "1"
},
{
"_id": 101,
"name": "Test Name 2",
"level": "1"
},
{
"_id": 102,
"name": "Test Name 3",
"level": "2"
}
]

其中“level”的范围只能是 0 到 5

我正在尝试使用 $group 和 $project 进行聚合查询,计算每个级别中有多少家公司,但根据我需要遵循的 API 规范,它需要像这样格式化,在一个单一的对象:

{
"metrics": {
"companies": {
"total": <integer>,
"level1": <integer>,
"level2": <integer>,
"level3": <integer>,
"level4": <integer>,
"level5": <integer>
}
}
}

我最接近的是像这样使用 $group 和 $project:

Companies.aggregate([{
$group: {
_id: {
level: "$level"
},
count: {
$sum: 1
}
}
},
{
$project: {
_id: 0,
level: "$_id.level",
total: "$count"
}
}
])

结果如下:

[
{
"level": 3,
"total": 108
},
{
"level": 5,
"total": 172
},
{
"level": 2,
"total": 624
},
{
"level": 4,
"total": 98
},
{
"level": 1,
"total": 137
},
{
"level": 0,
"total": 94
}
]

但是,这个结果是一个数组,我需要根据规范将每个级别的数据放在一个对象中,并使用新键“level1”、“level2”等。

我认为我需要进行另一个 $group 操作,但我不知道如何操作。

有什么想法吗?

最佳答案

我不确定我是否理解,但我想你只需要映射它,就像这里一样:

> var aux = new Object;
> db.Companies.aggregate([
{
$group: {
_id: {
level: "$level"
},
count: {
$sum: 1
}
}
},
{
$project: {
_id: 0,
level: "$_id.level",
total: "$count"
}
}
]).forEach(function(a){aux["level"+a.level] = a.total;});
> printjson(aux);
{ "level2" : 1, "level1" : 2 }

关于mongodb - 如何在 mongodb $group 之后使用新键将数据再次分组到单个对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42215522/

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