带有' sub'的MongoDB查询组组

时间:2016-08-08 07:48:35

标签: mongodb

从产品库存日志中我创建了一个MongoDB集合。相关领域是:sku,股票和日期。每次更新产品库存时,都会有一个新的库存总数。

skus由两部分组成。父母的一部分,说' A'和变种或儿童部分,比如说' 1',' 2',' 3'等等。所以sku可能看起来像这样:' A2'

我可以使用此查询查询按天分组的单个产品库存:

    [{
        $match: {
            sku: 'A2'
        }
    },
    {
        $group: {
            _id: {
                year: {$year: '$date'}, 
                day: {$dayOfYear: '$date'}
            },
            stock: {
                $min: '$stock'
            },
            date: {
                $first: '$date'
            }
        }
    },
    {
        $sort: {
            date: 1
        }
    }]

注意:我想要每天的最低库存量。

但我需要查询所有增加的变化(最小)股票。我可以将$ match对象更改为:

    [{
        $match: {
            sku: /^A/
        }
    }

如何创建' sub' $ group阶段的小组?

编辑:

数据如下所示:

{
    sku: 'A1',
    date: '2015-01-01',
    stock: 15
}

{
    sku: 'A1',
    date: '2015-01-01',
    stock: 14
}

{
    sku: 'A2',
    date: '2015-01-01',
    stock: 20
}

' A1'一个用于' A2'在一天。我的查询(按天分组的所有skus)将给出我的股票14作为结果(3个值中的$ min)。但我希望结果为34. 20(A2的最小值)加上14(A1的最小值)

1 个答案:

答案 0 :(得分:0)

如果你将sku添加到组阶段的_id字段,它也将聚合在那个上,即每个sku组,年和组;一天。

db.stocks.aggregate(
[
  {
    $group: {
        _id: {
            sku: '$sku',
            year: {$year: '$date'}, 
            day: {$dayOfYear: '$date'}
        },
        stock: {
            $min: '$stock'
        },
        date: {
            $first: '$date'
        }
    }
  },
  {
    $sort: {
        date: 1
    }
  }]
)