Javascript mongoose:如何查找以给定输入开始的日期(如自动完成:25/01/2…,25/01…)

Javascript mongoose:如何查找以给定输入开始的日期(如自动完成:25/01/2…,25/01…),javascript,node.js,mongodb,date,mongoose,Javascript,Node.js,Mongodb,Date,Mongoose,我将对象存储在db中,如: [ { "created_at" : ISODate("2020-03-19T07:27:32.158Z"), }, { "created_at" : ISODate("2020-03-19T12:10:19.191Z"), } ] 我想查找在创建的数据,如自动完成:25…,25/01…,25/01/202… 我有一个输入日期,可以以以下格

我将对象存储在db中,如:

[
   {
      "created_at" : ISODate("2020-03-19T07:27:32.158Z"),
   },
   {
      "created_at" : ISODate("2020-03-19T12:10:19.191Z"),
   }
]
我想查找在创建的数据,如自动完成:25…25/01…25/01/202…

我有一个输入日期,可以以以下格式获取数据:25/01/2021dd/mm/yyyy

结果可以是2525/0

在这种情况下,我需要查找在以下位置创建的数据:从25/0开始


它类似于方法:
$regex:“^”+date
,但带有日期的

聚合管道的一个示例,用于在运行时转换它。在大型集合上可能非常昂贵,因为它处理每个请求的所有文档,并且不能使用索引

db.collection.aggregate([
  {
    "$addFields": {
      "created_at_str": {
        $dateToString: {
          date: "$created_at",
          format: "%d/%m/%Y" 
        }
      }
    }
  },
  {
    "$match": {
      "created_at_str": {
        $regex: "^" + date
      }
    }
  },
  {
    "$project": {
      "created_at_str": 0
    }
  }
])

一个使用

将日期转换为字符串并使用正则表达式的示例,但是如何将字符串与db中的日期进行比较:
ISODate(“2020-03-19T12:10:19.191Z”)
“将日期转换为字符串”意味着将日期(bson类型9)转换为字符串(bson类型2),例如
ISODate(“2020-03-19T12:10:19.191Z”)
转换为
“19/03/2020”
。然后,您可以根据需要对这些字符串进行所有筛选和比较。为了清楚起见,您可以在应用程序级别(mongoose模式)将日期转换为字符串,并将其作为额外字段添加到文档中。在这种情况下,您需要一次性更新所有现有文档。或者,您可以使用在运行时转换它。它不需要对模型进行任何更改,但在每次请求时计算成本相当高。根据数据访问模式选择哪种方法取决于您。有人能提供一个以$dateToString示例为答案的聚合吗