首页 > 解决方案 > uniwind 创建只有不同值的行

问题描述

我正在使用 mongo 查询聚合,我有这样的数据

[
    {
        "token" : "c1",
        "class" : "bscs",
        courses : ["ITM", "CS54", "KHE"]
    }
]

我正在使用$unwind打破课程

[
    {
        "token" : "c1",
        "class" : "bscs",
        courses : "ITM"
    },
    {
        "token" : "c1",
        "class" : "bscs",
        courses : "CS54"
    },
    {
        "token" : "c1",
        "class" : "bscs",
        courses : "KHE"
    }
]

我想要的是,它应该是这样的:-

[
    {
        "token" : "c1",
        "class" : "bscs",
        courses : "ITM"
    },
    {
        "token" : "",
        "class" : "",
        courses : "CS54"
    },
    {
        "token" : "",
        "class" : "",
        courses : "KHE"
    }
]

因为我有一个表格结构,我需要在其中显示数据,这非常复杂,并且那里显示了来自不同查询的大量数据,所以我无法更新它。如果是这样,那么我可以在表格中显示为 在此处输入图像描述

我的聚合是

[   {.....}, // others projections and matches
   { 
    $unwind: {
     path: '$courses'
    }
   }
]

标签: mongodbaggregation-framework

解决方案


您可以includeArrayIndex在运行$unwind时使用选项,然后在 index 不等于时使用$cond设置空字符串0

db.collection.aggregate([
    {
        $unwind: {
            path: "$courses",
            includeArrayIndex: "index"
        }
    },
    {
        $project: {
            token: { $cond: [ { $eq: [ "$index", 0 ] }, "$token", "" ] },
            class: { $cond: [ { $eq: [ "$index", 0 ] }, "$class", "" ] },
            courses: 1
        }
    }
])

蒙戈游乐场


推荐阅读