Как получить одно поле для поиска$?

#mongodb #aggregation-framework

Вопрос:

Я пытаюсь выполнить «левое соединение» с тремя коллекциями, чтобы получить значение из третьей коллекции, но я не получаю его как единое значение.

Пример:

Коллекция 1:

 { socialNetworkId: 1, name: "Orkut"}
 

Коллекция 2:

 { userId: 1, socialNetworkId: 1, imgId: 100, user: "George" }
{ userId: 2, socialNetworkId: 1, imgId: 100, user: "Flanders" }
 

Коллекция 3:

 { imgId: 100, img: "url" }
 

Когда я делаю что-то вроде:

 db.socialNetwork.aggregate(
    { $match : {"socialNetworkId" : "1"} },
    {
        $lookup : {
            from : "users",
            localField : "socialNetworkId",
            foreignField : "socialNetwork.socialNetworkId",
            as : "users"
        }
    },
    {
        $lookup : {
            from : "images",
            localField : "users.imgId",
            foreignField : "imgId",
            as : "images"
        }
    },
    {
        $addFields: (
            {
              "users.img": "$images.img"
            }
        )
    },
    {
        $project : {
            "images": 0
        }
    }
);
 

Я получаю:

 {
  socialNetworkId: 1,
  "users" : [
    { 
      userId: 1, 
      socialNetworkId: 1, 
      user: "George",
      **images: [""]**
    },...
  ]
}
 

Есть ли в любом случае возможность получить изображения в виде одного значения вместо массива?

Комментарии:

1. Как вы хотите отобразить изображения из массива в выходных данных. «…одно значение вместо массива» : вы имеете в виду только одно (или первое) значение в массиве?

2. @prasad_ одно значение из массива, которое ссылается на другую коллекцию

3. Ваш запрос на данном этапе не соответствует никаким данным $match . Кроме того, в первом $lookup поле кода foreignField : "socialNetwork.socialNetworkId" должно быть `Иностранное поле : «Идентификатор социальной сети»`». Пожалуйста, старайтесь не публиковать код без его проверки.