在我的aggreagate管道中执行展开后,我有中间结果,例如:
[
{_id:1, precision:0.91, recall:0.71, other fields...},
{_id:1, precision:0.71, recall:0.81, other fields...},
{_id:1, precision:0.61, recall:0.91, other fields...},
{_id:2, precision:0.82, recall:0.42, other fields...},
{_id:2, precision:0.72, recall:0.52, other fields...},
{_id:2, precision:0.62, recall:0.62, other fields...}
]
现在我想通过_id对文档进行分组,然后在每个组中查找最大召回的文档,并获取此文档的召回,精度和_id。
结果将是:
[
{_id:1, precisionOfDocWithMaxRecall:0.61, maxRecall:0.91},
{_id:2, precisionOfDocWithMaxRecall:0.62, maxRecall:0.62}
]
我已设法使用group和max但没有精确字段来获取结果。
答案 0 :(得分:5)
您可以运行以下管道,它使用 $sort
运算符来排序文档首先进入 $group
管道,然后使用 $first
(或 $last
,具体取决于排序方向),以返回有序列表中的第一个/最后一个元素:
db.collection.aggregate([
/* previous pipeline */
{ "$sort": { "recall": -1 } },
{
"$group": {
"_id": "$_id",
"precisionOfDocWithMaxRecall": { "$first": "$precision" },
"maxRecall": { "$first": "$recall" }
}
}
])