我以这种格式将对象保存在MongoDb上
{
...
date: (format "dd/MM/yyyy"),
hour: (format "hh:mm")
...
}
我需要找到所有在某个日期和/或某个小时之后的东西,例如
db.inventory.find(
{
date: {$gte: "20/03/2019"}
})
或
db.inventory.find(
{
hour: {$gte: "15:00"}
})
或
db.inventory.find(
{
date: {$gte: "20/03/2019"},
hour: {$gte: "15:00"}
})
这些不起作用,但这就是查询的想法
答案 0 :(得分:1)
由于日期和时间是字符串,为了正确查询,您可以将其转换为有效日期。
您可以对$project和$dateFromString使用聚合,如下所示:
db.inventory.aggregate([
{
$project: {
_id: 0,
date: {
$dateFromString: {
dateString: { $concat: ["$date", "T", "$time"] },
format: "%d/%m/%YT%H:%M" // <-- specify the format for the conversion
}
}
}
},
{
$match: {
date: { $gte: ISODate("2018-03-20") } // <-- get all after 2018
}
}
])
您可以看到它working here
请注意,$dateFromString
是 mongo 3.6版及更高版本
更新:
如果您确实需要查询小时/分钟,则可以使用$dateToParts添加另一个投影:
db.collection.aggregate([
{
$project: {
_id: 0,
date: {
$dateFromString: {
dateString: {
$concat: ["$date", "T", "$time"]
},
format: "%d/%m/%YT%H:%M"
}
}
}
},
{
$project: {
date: 1,
parts: { $dateToParts: { date: "$date" }}
}
},
{
$match: {
"parts.hour": {
$gte: 10 // <-- get hours bigger or equal 10
}
}
}
])
您可以使用第二个示例,并查看它working here