【发布时间】:2021-05-10 06:35:55
【问题描述】:
在我的 MongoDB 集合中,我有包含嵌套字符串字段的文档,其中包含月份和年份,例如'04/2021'。示例文档:
{
"_id": {
"$oid": "608ba45cec43c5b24cda034b"
},
"status": "pass",
"stage": 5,
"priority": 0,
"payload": {
"company_id": "8800",
"company_name": "<MY COMPANY>",
"target_period": "04/2021"
},
"retry_count": 0,
"build_number": "101",
"job_name": "P123",
"createdAt": {
"$date": "2021-04-30T06:31:56.000Z"
},
"updatedAt": {
"$date": "2021-05-10T03:55:44.686Z"
}
}
我正在尝试编写一个聚合管道,该管道将动态返回所述字段指向过去一个月的文档。例如,本月(2021 年 5 月)运行,我会收到标有“04/2021”的文档。从this post,我找到了用于获取比较字符串的oneliner:new Date(new Date().getFullYear(), new Date().getMonth(), 1)。 (我知道,由于getMonth 返回一个从零开始的月份索引,所以上个月的工作是偶然的,必须以某种方式解决。)
此管道不起作用:
[
{
$addFields: {
previous_month: {
$dateToString: {
'date': new Date(new Date().getFullYear(), new Date().getMonth(), 1),
'format': '%m/%G'
}
}
}
},
{
$match: {
"payload.target_period": "$previous_month"
}
}
]
使用 MongoDB Compass,我可以看到 previous_month 字段被 $addFields 阶段填充得很好(上面的示例文档获得值 04/2021),但 $match 阶段返回 0 个文档。我正在运行 MongoDB 版本 4.2.12。
【问题讨论】:
标签: mongodb