gpt4 book ai didi

MongoDB聚合排序

转载 作者:IT老高 更新时间:2023-10-28 11:06:50 25 4
gpt4 key购买 nike

我有一个学生数据库及其联系方式。我试图找出容纳最多学生的邮政编码。学生的文件看起来像这样......

{studentcode: 'smi0001', firstname: 'bob', surname: 'smith', postcode: 2001}

我想我可以使用聚合框架来找出大多数学生的邮政编码,方法是......

db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})

这按预期工作(将邮政编码返回为 _id 并将每个邮政编码中的学生人数返回为“学生”,但如果我将 $sort 添加到管道中,它似乎尝试按整个学生集合而不是 $group 操作的结果进行排序。

我正在尝试的样子...

db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})

但它返回整个集合并忽略 $project$group...我错过了什么吗?我以为我只能按学生人数降序排序并返回第一项。提前感谢您的帮助。

最佳答案

你差点就吃完了……

db.test.aggregate(
{$group: {_id: '$postcode', students: {$sum: 1}}},
{$sort: {_id: -1}}
);

给出(我添加了一些与您的样本匹配的测试数据):

{
"result" : [
{
"_id" : 2003,
"students" : 3
},
{
"_id" : 2002,
"students" : 1
},
{
"_id" : 2001,
"students" : 2
}
],
"ok" : 1
}

您在所有内容周围都有一个外部 {},这引起了一些困惑。 group 和 sort 在管道中没有作为单独的操作工作。

你并不真的需要这个案例的项目。

更新您可能希望按“学生”排序,像这样,首先获得最大的邮政编码(按人口):

db.test.aggregate(
{$group: {_id: '$postcode', students: {$sum: 1}}},
{$sort: {students: -1}}
);

关于MongoDB聚合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12451322/

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