Raf*_*ini 7 mongodb aggregation-framework
当我需要使用aggregateMongoDB上的命令按日期聚合事物时,我通常这样做:
db.mycollection.aggregate(
{
$project: {
day: {$dayOfMonth: "$date"},
mon: {$month: "$date"},
year: {$year: "$date"},
}
},
{
$group: {
_id : {day: "$day", mon: "$mon", year: "$year"},
count: {$sum: 1}
}
}
)
Run Code Online (Sandbox Code Playgroud)
并最终将day,mon和year字段连接到应用程序中的日期字符串.但是出于很多原因,有时我想在离开数据库之前连接字段,所以我最初尝试过:
db.mycollection.aggregate(
{
$project: {
day: {$dayOfMonth: "$date"},
mon: {$month: "$date"},
year: {$year: "$date"},
}
},
$project: {
datestr: {
$concat : ["$year", "-", "$month", "-", "$day"]
}
}
},
{
$group: {
_id : {day: "$day", mon: "$mon", year: "$year"},
count: {$sum: 1}
}
}
)
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为$concat期望字符串和day,mon并且year是整数.所以,我的问题是:我可以用$project操作键入一个字段吗?
是的,您可以使用$substr将数字转换为字符串.您丢失的链接如下所示:
{
$project: {
day_s: { $substr: [ "$day", 0, 2 ] },
mon_s: { $substr: [ "$month", 0, 2 ] },
year_s: { $substr: [ "$year", 0, 4 ] }
}
}
Run Code Online (Sandbox Code Playgroud)