我正在尝试编写一个 mongo 聚合,它返回过去 6 个月内发送电子邮件的所有记录。
emailSentDate
字段以 DD-MM-YYYY
格式存储(令人烦恼)。
我一直在类似问题中查看这个答案,但我无法让它发挥作用。有人能帮我指出正确的方向吗?
到目前为止我所拥有的:
蒙戈数据 数据以这种格式存储。显然还有很多字段我省略了,因为它们不相关。
{
"admin": {
"emailSentDate": "11-06-2023"
},
"data": {
// More data here
}
}
到目前为止我的代码
const now = new Date();
const sixMonthsAgoDate = now.setMonth(now.getMonth() - 6);
const data = await MyModel.aggregate(
[
{
$addFields: {
"admin.emailSentDate" : {$dateFromString: {dateString: "$admin.emailSentDate", format: "%d-%m-%Y"}}
}
},
{
$match: {"admin.emailSentDate": {$gte: sixMonthsAgoDate} }
}
]
)
我没有得到任何数据,只是一个空数组。有人能看到我在这里做错了什么吗?
谢谢
一个选项是:
db.collection.find({
$expr: {$gte: [
{$dateFromString: {
dateString: "$admin.emailSentDate",
format: "%d-%m-%Y"
}},
{$dateSubtract: {
startDate: "$$NOW",
unit: "month",
amount: 6
}}
]}
})
查看它在 playground 示例中的工作原理