gpt4 book ai didi

MongoDB Aggregate 获取特定考试中存在的用户数量并确保该考试中的位置数量

转载 作者:行者123 更新时间:2023-12-04 07:51:14 26 4
gpt4 key购买 nike

我有一个这样的数据集:

[
{
"_id" : ObjectId("5fa506a9fe8d8429b0f7a85c"),
"userid" : "5c35f1045643180d9488112f",
"pt" : 2,
"date" : ISODate("2021-02-28T08:17:45.489Z"),
"wtg" : 0.92,
"rank" : 1
},
{
"_id" : ObjectId("5fa506a9fe8d8429b0f7a85d"),
"userid" : "5c35f1045643180d9488112g",
"pt" : 2,
"date" : ISODate("2021-02-28T08:17:45.489Z"),
"wtg" : 0.82,
"rank" : 2
},
{
"_id" : ObjectId("5fa506a9fe8d8429b0f7a85e"),
"userid" : "5c35f1045643180d9488112f",
"pt" : 1,
"date" : ISODate("2021-02-28T08:17:45.489Z"),
"wtg" : 0.92,
"rank" : 1
},
{
"_id" : ObjectId("5fa506a9fe8d8429b0f7a85f"),
"userid" : "5c35f1045643180d9488112f",
"pt" : 3,
"date" : ISODate("2021-02-28T08:17:45.489Z"),
"wtg" : 21.92,
"rank" : 1
},
{
"_id" : ObjectId("5fa506a9fe8d8429b0f7a85g"),
"userid" : "5c35f1045643180d9488112f",
"pt" : 3,
"date" : ISODate("2021-02-28T08:17:45.489Z"),
"wtg" : 10.92,
"rank" : 2
},
{
"_id" : ObjectId("5fa506a9fe8d8429b0f7a85h"),
"userid" : "5c35f1045643180d9488112f",
"pt" : 4,
"date" : ISODate("2021-02-28T08:17:45.489Z"),
"wtg" : 1002,
"rank" : 1
}
]
我有 4 种类型的考试,即 pt: 1, pt: 2, pt: 3, pt: 4
现在我想要列表中所有用户的结果,以及该考试用户安全排名 1、2 或 3 的次数。
虚拟预期答案:
假设任何参与 pt 的用户:1 次考试,3 次获得第 1 名,1 次获得第 2 名,5 次获得第 3 名。
[
{
pt: 2,
users: [
{ uid: '5c35f1045643180d9488112f', rank1: 3, rank2: 1, rank3: 5 },
{ uid: '5c35f1045643180d9488113g', rank1: 0, rank2: 15, rank3: 2 },
]
}
]

我尝试的只是代表 userid 的重复。我对如何编写正确的查询来实现这一点感到困惑:
db.CollectionName.aggregate(
[
{
$facet: {
groupByPage: [
{ $unwind: '$_id' },
{
$group: {
_id: '$_id',
count: { $sum: 1 },
},
},
],
}
}
]
)

任何人都可以用正确的方法指导我并分享可理解性的步骤。

最佳答案

您可以使用单个 $group阶段在哪里用排名值的条件求和,如下所示:

db.collection.aggregate([
{
$group: {
_id: {
user: "$userid",
exam: "$pt"
},
rank1: {
$sum: {
$cond: [
{
$eq: [
"$rank",
1
]
},
1,
0
]
},

},
rank2: {
$sum: {
$cond: [
{
$eq: [
"$rank",
2
]
},
1,
0
]
},

},
rank3: {
$sum: {
$cond: [
{
$eq: [
"$rank",
3
]
},
1,
0
]
},

}
}
},
{
$group: {
_id: "$_id.exam",
users: {
$push: {
uud: "$_id.user",
rank1: "$rank1",
rank2: "$rank2",
rank3: "$rank3"
}
}
}
}
])
Mongo Playground

关于MongoDB Aggregate 获取特定考试中存在的用户数量并确保该考试中的位置数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66964019/

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