MongoDB. Работа с массивами и расчетами - PullRequest
1 голос
/ 20 марта 2019

Я изо всех сил пытаюсь найти способ получить количество заказов на продукт за определенный период.Я хочу получить сумму заказов на товары, начиная с 2 дней назад, а именно (я хочу получить сумму заказов за период с 21 марта по 19 марта), поэтому мы не будем добавлять заказы с 17 марта к результату.

вот пример записи

{
"productId": "32947681206",
"category": "Furniture",
"orders": [{
        "date": ISODate("2019-03-17T00:00:00.000+0000"),
        "orders": NumberInt(3)
    },
    {
        "date": ISODate("2019-03-19T00:00:00.000+0000"),
        "orders": NumberInt(3)
    },
    {
        "date": ISODate("2019-03-20T00:00:00.000+0000"),
        "orders": NumberInt(2)
    }
]

}

1 Ответ

2 голосов
/ 20 марта 2019

Вы можете использовать $ Reduce , чтобы условно ( $ cond ) суммировать элементы массива:

db.col.aggregate([
    {
        $project: {
            sum: {
                $reduce: {
                    input: "$orders",
                    initialValue: 0,
                    in: {
                        $add: [
                            "$$value",
                            {
                                $cond: [
                                    { $gte: [ "$$this.date", ISODate("2019-03-19T00:00:00.000+0000") ] },
                                    "$$this.orders",
                                    0
                                ]
                            }
                        ]
                    }
                }
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...