Объединить массив в MongoDB - PullRequest
0 голосов
/ 12 марта 2020

Привет Это мой код, и я просто не знаю, что делать

db.car3.aggregate([{$group:{_id:"$Manufacturer",Extras:{$push:"$Extras"}}}]) 

В результате я получу

{_ID:"Fiat","Extra:[[Aircon,parking,GPS],[GPS,Parking Sensor, Pass]]"},
{_ID:"Toyota","Extra:[[ABS,Power Windows,GPS],[GPS,Auto Wiper, Pass]]"}

Я не уверен, как бы я объединил эти массивы вместе, так что конец это быть

{_ID:"Fiat","Extra:[[Aircon,parking,GPS,Parking Sensor, Pass]]"},    
{_ID:"Toyota","Extra:[ABS,Power Windows,GPS,Auto Wiper, Pass]"}

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Похоже, $extra уже массив. Итак, перед $group используйте $unwind.

Кроме того, вместо $push используйте $addToSet для сохранения уникальности полей в массиве.

Обновленный запрос будет выглядеть следующим образом:

db.car3.aggregate([
    {
        $unwind:"$Extras"
    },
    {
        $group:{
            _id:"$Manufacturer",
            Extras:{
                $addToSet:"$Extras"
            }
        }
    }
]).pretty()

Следовательно, дальнейшее объединение после этого не требуется.

Вывод будет:

{_ID:"Fiat","Extra:[[Aircon,parking,GPS,Parking Sensor, Pass]]"},    
{_ID:"Toyota","Extra:[ABS,Power Windows,GPS,Auto Wiper, Pass]"}
0 голосов
/ 13 марта 2020

Вы используете оператор $reduce для объединения каждого элемента в массиве в одно значение (в данном случае несколько массивов в один массив).

Просто добавьте этот этап в агрегацию после $group этап:

{ 
  $addFields: { 
      Extra: { 
          $reduce: { 
               input: "$Extra", 
               initialValue: [ ], 
               in: { $concatArrays : [ "$$value", "$$this" ]  } 
          }
      }
  }
}
...