尽管有日期值,我如何选择时间值为00:00:00的所有日期?正则表达式对我不起作用。
{
"_id" : ObjectId("59115a92bbf6401d4455eb21"),
"name" : "sfdfsdfsf",
"create_date" : ISODate("2013-05-13T02:34:23.000Z"),
}
类似的东西:
db.myCollection.find({"create_date": /*T00:00:00.000Z/ })
答案 0 :(得分:1)
您需要先将创建的日期转换为时间字符串,如果时间是00:00:00:000,则包含该文档。
db.test.aggregate([
// Part 1: Project all fields and add timeCriteria field that contain only time(will be used to match 00:00:00:000 time)
{
$project: {
_id: 1,
name: "$name",
create_date: "$create_date",
timeCriteria: {
$dateToString: {
format: "%H:%M:%S:%L",
date: "$create_date"
}
}
}
},
// Part 2: match the time
{
$match: {
timeCriteria: {
$eq: "00:00:00:000"
}
}
},
// Part 3: re-project document, to exclude timeCriteria field.
{
$project: {
_id: 1,
name: "$name",
create_date: "$create_date"
}
}
]);
答案 1 :(得分:0)
从 MongoDB 版本 >= 4.4 开始,我们可以使用 $function
运算符编写自定义过滤器。
注意:不要忘记根据您的要求更改时区。时区不是强制性的。
let timeRegex = /.*T00:00:00.000Z$/i;
db.myCollection.find({
$expr: {
$function: {
body: function (createDate, timeRegex) {
return timeRegex.test(createDate);
},
args: [{ $dateToString: { date: "$create_date", timezone: "+0530" } }, timeRegex],
lang: "js"
}
}
});