#mongodb
#mongodb
Вопрос:
У меня есть база данных
{
"_id": "222jMQDEHuHXTuDeF",
"customer_id": "QfdAFubKS9ytdbhbq",
"createdDate": {
"$date": "2020-07-27T08:19:40.791Z"
}
},
{
"_id": "278jKLDEHuHXItDeF",
"customer_id": "HtdAFubJS8ytdnjbe",
"createdDate": {
"$date": "2020-07-26T08:19:40.791Z"
}
},
{
"_id": "128lRLDEHuHXItPhy",
"customer_id": "KodATubJS8yyqkjbe",
"createdDate": {
"$date": "2020-07-25T08:19:40.791Z"
}
}
Мне нужно получить данные за предыдущую неделю, где текущая дата является датой окончания, и сгруппировать по дате и customer_id и получить количество customer_id в mongodb.
Комментарии:
1. Если ваш ответ поможет вам, пожалуйста, отметьте и проголосуйте за, чтобы помочь людям, которые задают вопросы такого рода
Ответ №1:
Вы можете сравнить следующим образом. Для простоты я добавил previouseWeekStart
, но вы можете напрямую вызывать ее внутри $match
сцены вместо использования $addFields
. Это определенно должно сработать, но я не могу показать демо в mongoplayground, поскольку я добавил символ вычитания ( -
) для вычисления предыдущей даты.
db.collection.aggregate([
{
$addFields: {
previouseWeekStart: new Date(new Date()-7*60*60*24*1000)
}
},
{
$match: {
$expr: {
$and: [
{
$gt: [
"$createdDate",
"$previouseWeekStart"
]
},
{
$lt: [
"$createdDate",
new Date()
]
}
]
}
}
},
{
$group: {
_id: {
cusId: "$customer_id",
date: "$createdDate"
},
count: {
$sum: 1
}
}
}
])