Объединить несколько проекций в агрегации MongoDB - PullRequest
0 голосов
/ 29 сентября 2019

Мой конвейер MongoDB (v4.2) состоит из нескольких проекций для вычитания, деления, построения и умножения значения.

Есть ли способ объединить их без использования нескольких проекций?

Мой конвейер:

[
    {
        $project: {
            duration: {
                $subtract: [ '$updated', '$created' ]
            }
        }
    },
    {
        $project: {
            duration: {
                $divide: [ '$duration', precision ]
            }
        }
    },
    {
        $project: {
            duration: {
                $ceil: [ '$duration' ]
            }
        }
    },
    {
        $project: {
            duration: {
                $multiply: [ '$duration', precision ]
            }
        }
    },
    {
        $group: {
            _id: '$duration',
            count: {
                $sum: 1
            }
        }
    }
]

Пример данных:

[
    { created: 1569763367, updated: 1569773367 },
    { created: 1569760000, updated: 1569770000 },
    { created: 1569772415, updated: 1569773519 },
]

1 Ответ

1 голос
/ 29 сентября 2019

Это возможно, но не очень читабельно:

[
    {
        $project: {
            duration: {
                $multiply: [
                    {
                        $ceil: [
                            {
                                $divide: [
                                    {
                                        $subtract: [ '$updated', '$created' ]
                                    },
                                    precision
                                ]
                            }
                        ]
                    },
                    precision
                ]
            }
        }
    },
    {
        $group: {
            _id: '$duration',
            count: {
                $sum: 1
            }
        }
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...