Как можно объединить вложенные массивы вложенных документов (Array Within Array) в MongoDB? - PullRequest
1 голос
/ 05 апреля 2020

Я хотел бы объединить массивы внутри массивов в MongodB

. Например, тестовая коллекция содержит документы в следующих форматах

**{
cmp_id :1
depts : [{"dept_id":1, emps:[1,2,3]}, {"dept_id":2, emps:[4,5,6]}, {"dept_id":2, emps:[7,8,9]} ]
}**

Мне нужен следующий вывод, Как я могу?

***{
cmp_id :1,
empids : [1,2,3,4,5,6,7,8,9]
}***

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вы можете использовать ниже агрегации

db.collection.aggregate([
  {
    $project: {
      depts: {
        $reduce: {
          input: "$depts",
          initialValue: [],
          in: {
            $concatArrays: [
              "$$value",
              "$$this.emps"
            ]
          }
        }
      }
    }
  }
])

MongoPlayground

0 голосов
/ 05 апреля 2020
db.collection.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path: "$depts"
            }
        },

        // Stage 2
        {
            $unwind: {
                path: "$depts.emps"
            }
        },

        // Stage 3
        {
            $group: {
                _id: '$cmp_id',
                empids: {
                    $push: '$depts.emps'
                }

            }
        },

    ]



);
...