从产品库存日志中我创建了一个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的最小值)
答案 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
}
}]
)