在聚合具有以下管道阶段的集合时
let ap = [{
$group: {
_id: {
year: { $year: '$itemDate' },
month: { $month: '$itemDate' },
},
count: { $sum: 1 },
},
}]
我收到这样的东西...
[
{ _id: { year: 2022, month: 9 }, count: 2 },
{ _id: { year: 2022, month: 4 }, count: 232 },
{ _id: { year: 2022, month: 3 }, count: 259 },
{ _id: { year: 2022, month: 8 }, count: 12 },
{ _id: { year: 2022, month: 1 }, count: 76 }
]
我希望使用$addFields
stage(或类似的stage),这样我的结果将具有一个键,并按年-月排序,如下所示
[
{ _id: { year: 2022, month: 1 }, count: 76, key: '2022-01'},
{ _id: { year: 2022, month: 3 }, count: 259, key: '2022-03'},
{ _id: { year: 2022, month: 4 }, count: 232, key: '2022-04'},
{ _id: { year: 2022, month: 8 }, count: 12, key: '2022-08'},
{ _id: { year: 2022, month: 9 }, count: 2, key: '2022-09'},
]
我试过一个模板字符串,但它不工作。我也不知道这将是如何排序要么...
ap.push({
$addFields: {
key: `${'$_id.year'}-${'$_id.month'}`,
key2: '$_id.year',
},
});
任何帮助都将不胜感激。
3条答案
按热度按时间ukdjmx9f1#
使用
$concat
链接$toString
的结果Mongo Playground
xwbd5t1u2#
您可以使用
$project
、$group
和$sort
的3步聚合管道。iyr7buue3#
备选办法1:
排序不需要单独的键,只需按
_id.year
和_id.month
排序即可。Demo
备选方案二:
在$group stage中创建字段,而不是另一个stage。将日期转换为字符串,并从组中选择$first。
Demo