arrays - mongodb中的合并聚合
问题描述
我需要编写一个解决以下问题的代码:
在演员集合上,展示职业生涯最长的演员。
我从以下 .json 文件开始:https ://drive.google.com/file/d/1VKuhce2ofjLjYEoND_Fz2wqcYHAf6kkZ/view
//unwind
db.getCollection("Tarea").find({})
fase1 = { $unwind: "$cast"}
etapas = [fase1]
db.Tarea.aggregate( etapas )
//out
fase1 = { $unwind: "$cast" }
query2 = { "_id": 0 }
fase2 = { $project: query2 }
fase3 = { $out: "actors" }
etapas = [ fase1, fase2, fase3 ]
db.Tarea.aggregate( etapas )
所以我创建了演员集合。现在我需要知道演员们活跃了多久。我想可以通过将 _id 列中的参与者分组并创建一个减去的新列来完成:
'最近的电影年 - 第一个电影年'
稍后将同一列从高到低排序,从而获得每个演员的“职业时间”。
我不知道是否有另一种更简单的方法来做到这一点。
提前感谢大家。
解决方案
有很多方法可以做到这一点,话虽如此 - 我会使用这个管道:
db.collection("Tarea").aggregate([
{
$unwind: "$cast"
},
{
$group: {
_id: "$cast",
last: {$max: "$year"},
first: {$min: "$year"}
}
},
{
$project: {
actor: "$_id",
careerLength: {$subtract: ["$last", "$first"]}
}
},
{
$sort: {
careerLength: -1
}
}
]);