Сопоставление массива объектов, содержащих объект, с использованием инфраструктуры агрегации - PullRequest
0 голосов
/ 10 марта 2019

Вот как данные в моей базе данных mongodb.

_id:ObjectId('5c38e514b88edd0ef236c3f7'),
rooms:[
 {
   info:{
      name:'John',
      age:'23'
   }
 },
 {
   info:{
      name:'Mary',
      age:'15'
  }
 }
]

Используя структуру агрегации, я хочу сопоставить поле 'name', которое находится внутри информационного объекта, который находится в массиве rooms. Как мне этого добиться?

Что я пробовал до сих пор:

    Hotel.aggregate([
        {$match: {
                 '_id':mongoose.Types.ObjectId(lodgeId), 
                 'rooms.info.name':'John'}}
   )]

Это дает мне ВСЕ КОМНАТЫ вместо того, чтобы сопоставить одно с именем Джон.

Как получить только соответствующий ряд?

1 Ответ

0 голосов
/ 11 марта 2019

Если вы раскрутите массив комнат перед матчем:

Hotel.aggregate([
    {$unwind: "$rooms"},
    {$match: {
             '_id':mongoose.Types.ObjectId(lodgeId), 
             'rooms.info.name':'John'}}
)]

Вы должны получить документ только с номерами, которые имеют имя Джон.

Размотка превращает поле массива в новый документ для каждого элемента в массиве.

...