簡體   English   中英

在MongoDB /貓鼬中排序和限制$ push聚合的結果

[英]In MongoDB / mongoose sort and limit result of $push aggregate

我想排序和限制結果,並合計$ group和$ push。

假設我有一個帶有在線訂單的系統。 我想獲得一個列表,其中包含每年訂購最多的3種產品,按年份和產品數量排序。

year    product     amount

2016    product A   100
2016    product B   200
2016    product C   300
2016    product D   1000
2016    product E   50

2015    product F   100
2015    product G   800
2015    product A   300
2015    product B   400
2015    product C   100

2014    product A   70
2014    product B   50
2014    product G   500
2014    product C   600
2014    product D   900

返回的對象應該是這樣的:

[
    {
        year: 2016,
        products: [
            {
                product: 'product D',
                amount: 1000
            },
            {
                product: 'product C',
                amount: 300
            },
            {
                product: 'product B',
                amount: 200
            }
        ]
    },
    {
        year: 2015,
        products: [
            {
                product: 'product G',
                amount: 800
            },
            {
                product: 'product B',
                amount: 400
            },
            {
                product: 'product A',
                amount: 300
            }
        ]
    },
    ...
]

在貓鼬中,我可以按年份分組數據:

Orders.model
    .aggregate([
        {
            $group: {
                _id: {
                    'year': '$year',
                },
                products: {
                    $push: {
                        product: '$product',
                        amount: '$amount'
                    }
                }
            }
        },

        {
            $project: {
                _id: 0,
                year: '$_id.year',
                products: '$products'
            }
        }
    ])

它會給我所有產品名稱和數量,而不是排序。

通過我不知道如何排序和限制分組的數據。 我嘗試$ sort,$ limit,$ each沒有成功。

分組之前對數據進行排序。 然后最后,您可以使用$slice獲取前三個元素:

[
        {
            $sort: {
                year:-1,
                amount:-1
            }
        },
        {
            $group: {
                _id: {
                    'year': '$year',
                },
                products: {
                    $push: {
                        product: '$product',
                        amount: '$amount'
                    }
                }
            }
        },
        {
            $project: {
                _id: 0,
                year: '$_id.year',
                product: {$slice: [ "$products", 3 ]}
            }
        }
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM