gpt4 book ai didi

mongodb - Mongodb聚合框架,排序然后分组不起作用

转载 作者:IT老高 更新时间:2023-10-28 13:11:35 26 4
gpt4 key购买 nike

我正在尝试先按日期对数据进行排序,然后在另一个字段上分组。它对我不起作用。

我要回答的问题是:选择最近的不同 cid?

鉴于此数据:

db.summary.save({"lid" : 5, "date" : 5, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 2, "date" : 2, "cid" : 1, "circles" : [ 2 ] })
db.summary.save({"lid" : 4, "date" : 0, "cid" : 3, "circles" : [ 2 ] })
db.summary.save({"lid" : 3, "date" : 3, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 1, "date" : 1, "cid" : 1, "circles" : [ 2 ] })

db.summary.aggregate( {$match :{circles: 2}, $sort: {date: -1}, $group: {_id: '$cid'}} )

我首先在圆圈上进行比赛,然后是日期排序,然后是cid上的一组

我得到的结果:

{
"result" : [
{
"_id" : 3
},
{
"_id" : 1
},
{
"_id" : 2
}
],
"ok" : 1
}

这是我的分析:

在按日期匹配或排序之前,数据为:

"lid" : 5, "date" : 5, "cid" : 2
"lid" : 2, "date" : 2, "cid" : 1
"lid" : 4, "date" : 0, "cid" : 3
"lid" : 3, "date" : 3, "cid" : 2
"lid" : 1, "date" : 1, "cid" : 1

按日期排序后,数据集为:

"lid" : 5, "date" : 5, "cid" : 2
"lid" : 3, "date" : 3, "cid" : 2
"lid" : 2, "date" : 2, "cid" : 1
"lid" : 1, "date" : 1, "cid" : 1
"lid" : 4, "date" : 0, "cid" : 3

所以分组后,我期望的结果是:

{
"result" : [
{
"_id" : 2
},
{
"_id" : 1
},
{
"_id" : 3
}
],
"ok" : 1
}

什么查询可以解决我的问题?

为什么当前查询对我不起作用?

最佳答案

当您在管道中的 $sort 之后 $group 时,先前的排序将丢失。您必须这样做,以便在分组后可以使用您想要排序的日期:

db.summary.aggregate(
{$match: {circles: 2}},
{$group: {_id: '$cid', date: {$max: '$date'}}},
{$sort: {date: -1}});

结果:

[ { _id: 2, date: 5 }, 
{ _id: 1, date: 2 },
{ _id: 3, date: 0 } ]

如果要 reshape 输出,请将 $project 添加到管道的末尾。

关于mongodb - Mongodb聚合框架,排序然后分组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14513185/

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