Задать вопрос
ERrorMAKros
@ERrorMAKros
Front-End/Back-End Developer

Как поменять агрегатный $group, который возвращает null при $lookup`е пустого массива?

Добрый день/вечер,
Столкнулся со сл. ситуацией.

В общем:
Есть коллекция "recommendations", в ней есть запись сл. вида:

{
    "_id" : ObjectId("5c995106deafcc7c86b9f284"),
    "id" : 777,
    "name" : "developers",
    "likesPeople" : [ 
        { "id" : 579 }, 
        { "id" : 398 }
    ]
}

Когда выполняю $lookup с коллекцией users по id`шникам в массиве recommendations.likesPeople (сл. образом):

db.getCollection('recommendations').aggregate([
    { $match: { id: 777 }},
    { $unwind: "$likesPeople" },
    { $lookup: {
        from: "users",
        localField: "likesPeople.id",
        foreignField: "id",
        as: "likesPeople"
    } },
    { $unwind: "$likesPeople" },
    { $group : { 
            _id: '$_id',
            likesPeople: { $push: "$likesPeople"},
            id: { $first: '$id' }
        }
    }
])

Получаю результат:

{
    "_id" : ObjectId("5c995106deafcc7c86b9f284"),
    "id" : 777,
    "likesPeople" : [ 
        {
            "_id" : ObjectId("5c99500adeafcc7c86b9f283"),
            "id" : 579,
            "name" : "Вася"
        }, 
        {
            "_id" : ObjectId("5c99b429deafcc7c86b9f28b"),
            "id" : 398,
            "name" : "Маша"
        }
    ]
}

Проблемы начинаются, когда массив likesPeople в коллекции recommendations - пустой:

{
    "_id" : ObjectId("5c995106deafcc7c86b9f284"),
    "id" : 777,
    "name" : "developers",
    "likesPeople" : []
}

После выполнения $lookup/$group, я получаю пустой результат и в следствии теряю возможность получить все остальные поля ( _id, id, name ). В какой то мере это логично...

В чем вопрос: Что нужно изменить в mongodb запросе, что бы в случаях когда likesPeople в коллекции не имеет значений (пустой), результат вернул мне все остальные поля:

{
    "_id" : ObjectId("5c995106deafcc7c86b9f284"),
    "id" : 777,
    "name" : "developers",
    "likesPeople" : null // или что угодно
}
  • Вопрос задан
  • 12 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы