#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"
должно быть `Иностранное поле : «Идентификатор социальной сети»`». Пожалуйста, старайтесь не публиковать код без его проверки.