假设我的数据库中包含以下数据,并且我希望汇总一些按第一个目标得分值分组的数据。
{
"_id" : ObjectId("5d7f6a937563a63c1d8b4639"),
"target" : [
{
"score" : 3
},
{
"score" : 2
}
]
},
{
"_id" : ObjectId("5d7f6a937563a63c1d8b4640"),
"target" : [
{
"score" : 1
},
{
"score" : 4
}
]
}
所以我正在尝试这样做:
data.aggregate(
[
{
$match: { 'target.0.score': { $exists: true } }
},
{
$group: {
_id: '$target.0.score',
Datasets: { $sum: 1 }
}
}
]
)
在我的代码中,我正在做一些平均计算,这就是为什么我使用聚合方法
查询结果为
[ { _id: [], Datasets: 2 } ]
但我希望
[
{ _id: 3, Datasets: 1 },
{ _id: 1, Datasets: 1 }
]
_id
应该是包含该得分的所有数据集计数的分组得分值(以及该组的一些平均计算结果)
答案 0 :(得分:1)
我很确定它已经回答了,但是无论如何:
data.aggregate(
[
{
$match: { 'target.0.score': { $exists: true } }
},
{
$group: {
_id: {$let:{
vars: {t0: {$arrayElemAt:["$target", 0]}},
in: "$$t0.score"
}},
Datasets: { $sum: 1 }
}
}
]
)
答案 1 :(得分:0)
如果要按第一个目标分数分组,则首先需要project
对第一个目标分数进行分组,然后按其分组:
data.aggregate(
[
{
$match: { 'target.0.score': { $exists: true } }
},
{
$project: {
first_target_score: {
$arrayElemAt: [
'$target', 0
]
}
}
},
{
$group: {
_id: '$first_target_score.score',
Datasets: { $sum: 1 }
}
}
]
)
我很确定这是可行的,但是我现在没有办法对其进行测试,请尝试一下