【发布时间】:2021-11-18 03:35:42
【问题描述】:
我正在尝试查找日期在小时分钟和秒部分中包含 00:00:00 的所有记录,以查找在我们的订阅服务中出错的文档。试图使用它,但它出错了。
db.CustomerSubscriptions.find({"UpcomingOrders.NextOrderDate": ISODate("/.*00:00:00.*/")})
【问题讨论】:
我正在尝试查找日期在小时分钟和秒部分中包含 00:00:00 的所有记录,以查找在我们的订阅服务中出错的文档。试图使用它,但它出错了。
db.CustomerSubscriptions.find({"UpcomingOrders.NextOrderDate": ISODate("/.*00:00:00.*/")})
【问题讨论】:
您可以使用$dateToParts
db.CustomerSubscriptions.aggregate([
{
$set: {
dateParts: {$dateToParts: {date: "$UpcomingOrders.NextOrderDate", timezone: ... } }
}
},
{$match: {"dateParts.hour": 0, "dateParts.minute": 0, "dateParts.second": 0} }
])
【讨论】:
您只能在字符串上应用正则表达式,因此您可以使用聚合并找到匹配的记录。请参考这里:https://mongoplayground.net/p/4o2h98R5jve
示例代码:
db.collection.aggregate([
{
"$addFields": {
"dateStrMatched": {
$regexMatch: {
input: {
"$dateToString": {
"date": "$date"
}
},
regex: "00:00:00."
}
}
}
},
{
"$match": {
dateStrMatched: true
}
}
])
流水线阶段: 添加字段:将日期转换为字符串并匹配正则表达式并将布尔标志存储为日期匹配与否 match:只过滤匹配的日期
【讨论】: