mongodb 基于Mongo DB中的日期获取数据

zsohkypk  于 2023-06-22  发布在  Go
关注(0)|答案(2)|浏览(268)

我在名为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"
        }
    }
);

但它没有给出所需的输出。

fxnxkyjh

fxnxkyjh1#

从我的Angular 来看,不建议将Date存储为字符串。当您按某个日期或日期范围查询文档时会遇到困难。即使可以将Date字符串转换为Date,您也会发现查询速度会更慢。
方法1:由于Checked in字段以以下格式开始:“MM/dd/yyyy”,可以使用正则表达式进行过滤。

db.collection.find({
  "Employee Name": "a1",
  "Checked in": {
    "$regex": "^06/20/2023"
  }
})

Demo Approach 1 @ Mongo Playground
方法2:将日期字符串转换为Date,并使用日期范围进行过滤。请注意,这需要聚合运算符,因此需要$expr运算符。

db.collection.find({
  $expr: {
    $and: [
      {
        $eq: [
          {
            $getField: "Employee Name"
          },
          "a1"
        ]
      },
      {
        $gte: [
          {
            $toDate: {
              $getField: "Checked in"
            }
          },
          new Date("2023-06-20T00:00:00Z")
        ]
      },
      {
        $lte: [
          {
            $toDate: {
              $getField: "Checked in"
            }
          },
          new Date("2023-06-21T00:00:00Z")
        ]
      }
    ]
  }
})

Demo Approach 2 @ Mongo Playground

fnvucqvd

fnvucqvd2#

查询中的问题是您使用了错误的字段进行比较。您不应将“员工姓名”字段与日期“06/20/2023”进行比较,而应将“签到”字段与所需日期进行比较。
以下是更正后的查询,用于获取员工“a1”在签入日期“06/20/2023”的数据:

db.getCollection("AuditReport").find({
"Employee Name": "a1",
"Checked in": "06/20/2023"});

此查询将匹配“员工姓名”字段为“a1”且“已登记”字段为“06/20/2023”的文档。请注意,日期格式应与集合中显示的日期格式完全匹配。
请确保具有正确的字段名称,并且集合中所有文档的日期格式一致。

相关问题