首页 > 解决方案 > 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 列中的参与者分组并创建一个减去的新列来完成:

'最近的电影年 - 第一个电影年'

稍后将同一列从高到低排序,从而获得每个演员的“职业时间”。

我不知道是否有另一种更简单的方法来做到这一点。

提前感谢大家。

标签: arraysmongodbaggregation-framework

解决方案


有很多方法可以做到这一点,话虽如此 - 我会使用这个管道:

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
        }
    }
]);

推荐阅读