Mon go запрос агрегации для фильтрации записей с минимальным количеством и количеством записей для одного пользователя - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь отфильтровать записи с условием для каждого пользователя с минимальным количеством 7 транзакций в месяц и каждой транзакцией, превышающей 1000 . У меня есть ниже json после 2-го этапа конвейера после отфильтровывания типа транзакции, которую я хочу, получая месяц устаревшим и используя groupby, чтобы получить количество транзакций каждого пользователя в месяц. Я не могу применить вышеуказанное условие, чтобы получить необходимые данные после этого.

Образец Json:

{
    "_id" : {
        "month" : 2,
        "sender" : "123dd3"
    },
    "data" : [
        {
            "name" : "name1",
            "amount" : 1000,
            "sender" : {
              "id" : "123455",
                "name" : "send 02",
                "phone" : "1234567"
            },
            "service" : "109",
            "createdAt" : "2020-02-07T16:24:56.047+06:30",
            "month" : 2
        },
        {
            "name" : "name1",
            "amount" : 10400,
            "sender" : {
              "id" : "123455",
                "name" : "send 02",
                "phone" : "1234567"
            },
            "service" : "109",
            "createdAt" : "2020-02-07T16:25:22.019+06:30",
            "month" : 2
        },
        {
            "name" : "name1",
            "amount" : 10400,
            "sender" : {
              "id" : "123455",
                "name" : "send 02",
                "phone" : "1234567"
            },
            "service" : "109",
            "createdAt" : "2020-02-07T16:26:16.703+06:30",
            "month" : 2
        }
    ],
    "count" : 3
}

Мой запрос:

[{
    $match: {
        service: '109'
    }
}, {
    $addFields: {
        "month": {
            "$month": "$createdAt"
        }
    }
}, {
    $group: {
        _id: {
            'month': '$month',
            'sender': '$sender.id'
        },
        data: {
            $push: '$$ROOT'
        },
        count: {
            $sum: 1
        }
    }
}, {
    $project: {
        '_id': 1,
        'data': 1,
        'count': 1,
        'cond': {
            $cond: [{
                $gte: ["$data.amount", 1000]
            }, true, false]
        }
    }
}]

I Я не могу правильно выполнить требуемое условие, так как в данных есть несколько записей, и мне нужно применить это условие к каждой из них, а количество транзакций будет больше, чем равно 7 .

1 Ответ

1 голос
/ 19 февраля 2020

Сначала необходимо $ filter ваш массив data, а затем выполнить $ size , чтобы увидеть, есть ли более 7 элементов

{
    $project: {
        '_id': 1,
        'data': 1,
        'count': 1,
        'cond': {
            $gte: [
                { $size: { $filter: { input: "$data", cond: { $gte: [ "$$this.amount", 1000 ] } } } },
                7
            ]
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...