Как использовать group by в mongodb? - PullRequest
1 голос
/ 09 мая 2019

Я хочу, чтобы значения были разделены запятыми. Так как использовать group / concat в статистической структуре?

Документ contact

{
  "_id" : "9c612c95054fb46e3de8dee8",
  "name" : "name1",
  "oppID" : [
        "5c612c95054fb46e3de8bcc5",
        "5bd6b334cba7d2241a3ba9d9"
       ]
},
{
  "_id" : "1c612c95054fb46e3de8dcde9",
  "name" : "name2",
  "oppID" : [
        "5c612c95054fb46e3de8bcc5",
        "5bd6b334cba7d2241a3ba9d9"
       ]
}

Document возможность

{
  "_id" : "5c612c95054fb46e3de8bcc5",
  "name" : "opp name 01",
},
{
  "_id" : "5bd6b334cba7d2241a3ba9d9",
  "name" : "opp name 02",
},

Я хочу получить список контактов, как показано ниже,

{
   "_id" : "9c612c95054fb46e3de8dee8",
   "oppName" : "opp name 01, opp name 02"
},
{
   "_id" : "1c612c95054fb46e3de8dcde9",
   "oppName" : "opp name 01, opp name 02"
}

1 Ответ

1 голос
/ 09 мая 2019

Вам нужно запустить $ lookup , чтобы получить данные из обеих коллекций, а затем $ уменьшить с помощью $ concat , чтобы преобразовать массив в одну строку

db.contact.aggregate([        
    {
        $lookup: {
            from: "opportunity",
            localField: "oppID",
            foreignField: "_id",
            as: "opportunities"
        }
    },
    {
        $project: {
            _id: 1,
            oppName: {
                $reduce: {
                    input: "$opportunities",
                    initialValue: "",
                    in: {
                        $cond: [ { $eq: [ "$$value", "" ] }, "$$this.name", { $concat: [ "$$value", ", ", "$$this.name" ] } ]
                    }
                }
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...