MongoDB Aggregation - $ group после $ lookup + $ unwind - PullRequest
1 голос
/ 13 апреля 2019

Итак, я новичок в структуре агрегации. У меня есть 2 коллекции с этими документами:

Пользователи

{
    '_id': ObjectId(user1),
    'name': 'Name1',
    'event': ObjectId(event1)
},
{
    '_id': ObjectId(user2),
    'name': 'Name2',
    'event': ObjectId(event2)
},
{
    '_id': ObjectId(user3),
    'name': 'Name3',
    'event': ObjectId(event1)
}

События

{
    '_id': ObjectId(event1),
    'name': 'Event2',
    'type': 'Party'
},
{
    '_id': ObjectId(event2),
    'name': 'Event2',
    'type': 'Meeting'
}

Ожидаемый результат

[
    {
    '_id': ObjectId(user1),
    'name': 'Name1',
    'event': 'Party'
    },
    {
    '_id': ObjectId(user2),
    'name': 'Name2',
    'event': 'Meeting'
    },
    {
    '_id': ObjectId(user3),
    'name': 'Name3',
    'event': 'Party'
    }

]

Итак, как вы видите, из приведенного выше объяснения я хочу сгруппировать пользователей и возвращать пользователей в зависимости от события, которое они посетили.

что я сделал до сих пор (агрегирование по пользователям)

[
    {
        "$lookup":
        {
            "from": "events",
            "localField": "event",
            "foreignField": "_id",
            "as": "Events"
        }
    },
    {
        "$unwind": "$Events"
    },
    {
        "$group":
        {
            "_id":
            {
                "type": "$Events.type"
            }
        }
    }
]

Я только получаю документы о мероприятии. Выход:

{ 'type':'Party'},
{'type': 'Meeting'}

Может, кто-нибудь подскажет, как группировать документы в коллекции по полю из документа в другой коллекции?

Thankyou!

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Следующий документ может помочь вам решить вашу проблему.Пожалуйста, обратитесь к документу -> ref.Document

0 голосов
/ 13 апреля 2019

Вы можете использовать $project вместо $group:

db.users.aggregate([
    {
        "$lookup": {
            "from": "events",
            "localField": "event",
            "foreignField": "_id",
            "as": "Events"
        }
    },
    {
        "$unwind": "$Events"
    },
    {
        $project: {
            _id: 1,
            name: 1,
            event: "$Events.name"
        }
    }
])
...