Выполнение реляционного запроса на Mongodb - PullRequest
0 голосов
/ 17 июня 2019

У меня есть две коллекции. Один назвал события, а другой назвал приложения. Приложения содержат пользовательские данные приложения для конкретного события. Я хочу найти те события, к которым пользователь не обращался.

Примечание:
1. Поле eventId в приложениях - DBRef для сбора событий.
2. Поле userId в приложениях - DBRef для коллекции пользователей.
3. Пользователь может применить к событию только один раз.

Пожалуйста, помогите мне. Заранее спасибо.

События:

[
    {
        "_id" : ObjectId("5d07c45fabb5c771f8a81228"),
        "fee" : 400
    },
    {
        "_id" : ObjectId("5d07c461abb5c771f8a81229"),
        "fee" : 500
    },
    {
        "_id" : ObjectId("5d07c463abb5c771f8a8122a"),
        "fee" : 700
    },
    {
        "_id" : ObjectId("5d07c466abb5c771f8a8122b"),
        "fee" : 800
    }
]

Применение:

[
    {
        "_id" : ObjectId("5d07c4e8abb5c771f8a8122c"),
        "eventId" : ObjectId("5d07c45fabb5c771f8a81228"),
        "userId" : ObjectId("5d07c45fabb5c772f8a81978"),
        "text" : "I am interested"
    }
]

1 Ответ

0 голосов
/ 18 июня 2019

Этап 1: $ lookup - используется для объединения событий и коллекций приложений

Этап 2: $ match - фильтровать события, для которых нет пользовательских приложений

[
    {
        '$lookup': {
            'from': 'applications', 
            'localField': '_id', 
            'foreignField': 'eventId', 
            'as': 'eventsApps'
        }
    }, {
        '$match': {
            '$expr': {
                '$lte': [
                    {
                        '$size': '$eventsApps'
                    }, 0
                ]
            }
        }
    }
]
...