MongoDB получает атрибут из массива внутри другого массива

Серия - это один документ. Внутри него есть ряд серий (в данном случае это "Месть" и "Рейнс"). У каждой серии есть литой массив с именами. И мне нужен запрос, чтобы получить эти имена.

Кто знает, как я могу получить список всех имен из обоих массивов?

Мой лучший подход был такой запрос db.series.find( {}, { _id: 0, cast: 1 }), где получить курсор с двумя массивами json преобразования.

{ series:
[ 
{ 
  name: 'Revenge',
  user_rating: 7.9,
  duration: 44,
  genres: [ ' Drama', ' Mystery', ' Thriller' ],
  year_start: '2011',
  year_end: '',
  cast: 
   [ { name: 'Madeleine Stowe' },
     { name: 'Emily VanCamp' },
     { name: 'Gabriel Mann' },
     { name: 'Nick Wechsler' },
     { name: 'Henry Czerny' },
     { name: 'Joshua Bowman' },
     { name: 'Christa B. Allen' },
     { name: 'Ashley Madekwe' },
     { name: 'Connor Paolo' },
     { name: 'Barry Sloane' },
     { name: 'Margarita Levieva' } ],
  seasons: [ { number: '3' }, { number: '2' }, { number: '1' } ]

},
{
name: 'Raines',
user_rating: 7.4,
duration: 45,
genres: [ ' Crime', ' Drama' ],
year_start: '2007',
year_end: '',
cast: 
    [ { name: 'Jeff Goldblum' },
     { name: 'Matt Craven' },
     { name: 'Nicole Sullivan' },
     { name: 'Linda Park' },
     { name: 'Dov Davidoff' },
     { name: 'Malik Yoba' },
     { name: 'Madeleine Stowe' } ],
seasons: [ { number: '1' } ] 

}
]
}

Мне нужен вывод, как это:

I need this:
         { name: 'Madeleine Stowe' },
     { name: 'Emily VanCamp' },
     { name: 'Gabriel Mann' },
     { name: 'Nick Wechsler' },
     { name: 'Henry Czerny' },
     { name: 'Joshua Bowman' },
     { name: 'Christa B. Allen' },
     { name: 'Ashley Madekwe' },
     { name: 'Connor Paolo' },
     { name: 'Barry Sloane' },
     { name: 'Margarita Levieva' },
         { name: 'Jeff Goldblum' },
     { name: 'Matt Craven' },
     { name: 'Nicole Sullivan' },
     { name: 'Linda Park' },
     { name: 'Dov Davidoff' },
     { name: 'Malik Yoba' },
     { name: 'Madeleine Stowe' }

1 ответ

Вы можете использовать структуру агрегации для этого:

db.series.aggregate( { $unwind : "$series" },
                     { $unwind : "$series.cast" },
                     { $group  : { _id  : "$_id",
                                   cast : {$push:"$series.cast}
                                 }
                     }
);

Если вы хотите объединить несколько выступлений актеров в один, замените $push с $addToSet,

Другие вопросы по тегам