我在名为AuditReport的集合中有数据,如下所示。
{
"_id" : ObjectId("642aa674759fdc00019ddac5"),
"Employee Name" : "a1",
"Checked in" : "06/20/2023 06:11 APM"
},
{
"_id" : ObjectId("642aa674759fdc00019ddac5"),
"Employee Name" : "a1",
"Checked in" : "04/03/2022 10:15 AM"
},
{
"_id" : ObjectId("642aa674759fdc00019ddac5"),
"Employee Name" : "a1",
"Checked in" : "06/20/2023 08:12 AM"
},
{
"_id" : ObjectId("642aa674759fdc00019ddac5"),
"Employee Name" : "a2",
"Checked in" : "06/20/2021 09:19 AM"
}
等等。
我需要获取员工(a1)在入住日期(06/20/2023)的数据。
db.getCollection("AuditReport").find(
{
"Employee Name" : "a1",
"Checked in" : {
"$eq" : "06/20/2023"
}
}
);
但它没有给出所需的输出。
2条答案
按热度按时间fxnxkyjh1#
从我的Angular 来看,不建议将Date存储为字符串。当您按某个日期或日期范围查询文档时会遇到困难。即使可以将Date字符串转换为Date,您也会发现查询速度会更慢。
方法1:由于
Checked in
字段以以下格式开始:“MM/dd/yyyy”,可以使用正则表达式进行过滤。Demo Approach 1 @ Mongo Playground
方法2:将日期字符串转换为Date,并使用日期范围进行过滤。请注意,这需要聚合运算符,因此需要
$expr
运算符。Demo Approach 2 @ Mongo Playground
fnvucqvd2#
查询中的问题是您使用了错误的字段进行比较。您不应将“员工姓名”字段与日期“06/20/2023”进行比较,而应将“签到”字段与所需日期进行比较。
以下是更正后的查询,用于获取员工“a1”在签入日期“06/20/2023”的数据:
此查询将匹配“员工姓名”字段为“a1”且“已登记”字段为“06/20/2023”的文档。请注意,日期格式应与集合中显示的日期格式完全匹配。
请确保具有正确的字段名称,并且集合中所有文档的日期格式一致。