Когда мне нужно агрегировать вещи по дате, используя aggregate
команду на MongoDB, я обычно делаю это:Можно ли вводить данные литья внутри конвейера агрегации на MongoDB?
db.mycollection.aggregate(
{
$project: {
day: {$dayOfMonth: "$date"},
mon: {$month: "$date"},
year: {$year: "$date"},
}
},
{
$group: {
_id : {day: "$day", mon: "$mon", year: "$year"},
count: {$sum: 1}
}
}
)
и в конечном счете конкатенировать 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}
}
}
)
Это не будет работать, потому что $concat
ожидает строки и day
, mon
и year
являются целыми числами. Итак, мой вопрос: могу ли я набирать поле с помощью операции $project
?
Отличный вопрос. Откуда у вас было вдохновение :) –