我有DateTime
字段的集合,其中datetime值保存在UTC中,带有时间。
我喜欢找到从上午8点到下午6点之间的所有记录,不管日期。我尝试了以下查询:
{ $expr: { $gte: [ { $hour: "$DateTime" }, 8 ]} }
无论日期如何,该查询在上午8点之后都可以正常工作以获取记录。我无法在同一匹配中找到$lte
的查询。这个查询不能工作:
{ $expr: { $gte: [ { $hour: "$DateTime" }, 8 ], $lte: [ { $hour: "$DateTime" }, 18 ]} }
错误:表示表达式的对象必须只有一个字段:{$gte: [{$hour: "$DateTime";}, 8], $lte: [{$hour: "$DateTime"}, 18]}
任何帮助都会很感激。如果这可以在mongo.net core中完成,那么使用lambda表达式将是非常棒的。
执行时间比较的一种简单方法是使用$dateToString
将其转换为字符串并执行字符串比较。
db.collection.aggregate([
{
$match: {
$expr: {
$and: [
{
$gte: [
{
"$dateToString": {
"date": "$DateTime",
"format": "%H:%M:%S"
}
},
"08:30:00"
]
},
{
$lte: [
{
"$dateToString": {
"date": "$DateTime",
"format": "%H:%M:%S"
}
},
"18:30:00"
]
}
]
}
}
}
])
这是Mongo游乐场供您参考。