uniwind с созданием строк, имеющих только разные значения - PullRequest
1 голос
/ 19 июня 2019

Я использую агрегацию запросов монго, где у меня есть такие данные

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

Я использую $ раскручивать , чтобы разбить курсы, что делает его

[
    {
        "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"
    }
]

Поскольку у меня есть табличная структура, где мне нужно показать данные, которые очень сложны, и там показано много данных из разных запросов, поэтому яне могу обновить это.если это так, то я могу показать в таблице как enter image description here

Мое агрегирование

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

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете использовать опцию includeArrayIndex при запуске $ unwind , а затем использовать $ 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
        }
    }
])

Детская площадка Монго

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...