Заполните поле "_id" при агрегировании - PullRequest
0 голосов
/ 18 июня 2019

Я использую агрегат для группировки некоторых данных.Я хочу заполнить поля "_id".

Допустим, у меня есть таблица расходов.Который имеет поля, «количество», «тип», «создан_ат», «создан_бай».Теперь я хочу сгруппировать по типу, где типы, я буду указывать в параметрах и показывать, сколько каждый пользователь тратит по типу. Например: ->

{
        "_id": "A",
        "user_group": [
            {
                "user": "user1",
                "data": 6600
            }
        ],
        "amount": 6600
    },
    {
        "_id": "B",
        "user_group": [
            {
                "user": "user1",
                "data": 21535.1
            },
            {
                "user": "user2",
                "data": 500
            }
        ],
        "amount": 22035.1
    },

Мой код ->

Expense.aggregate([
            {
                $match: {
                    $and:
                        [
                            { type: { $in: req.query.types} },
                            //{ created_at: Date }
                        ]
                }
            },
            {
                $group: {
                    "_id": {
                        type: "$type",
                        user: "$created_by"
                    },
                    "amount": { "$sum": "$amount" },
                    "data": { $push: "$$ROOT" }
                }
            }, {
                $group: {
                    _id: "$_id.type",
                    user_group: {
                        $push: {
                            user: "$_id.user",
                            data: { "$sum": "$data.amount" },
                            username: "$user"
                        }
                    },
                    amount: { "$sum": "$amount" },
                }
            },

        ], function (err, data) {
            if (err) {
                console.log("Error: ", err);
                res.json({
                    success: false,
                });
            } else {
                res.json({
                    success: true,
                    data: data
                });
            }
        });

С этим кодом мне не удается получить имя пользователя из таблицы пользователей.Я получаю данные ->

       {
        "_id": "A",
        "user_group": [
            {
                "user": "5b782c3010a1683090429771",
                "data": 6600
            }
        ],
        "amount": 6600
    },
    {
        "_id": "B",
        "user_group": [
            {
                "user": "5be6d50e1ee4e926dc5ba6f0",
                "data": 21535.1
            },
            {
                "user": "5b782c3010a1683090429771",
                "data": 500
            }
        ],
        "amount": 22035.1
    },

Я хочу заполнить поле пользователя.Как я могу это сделать?Спасибо заранее.

...