Javascript mongoose:如何查找以给定输入开始的日期(如自动完成:25/01/2…,25/01…)
我将对象存储在db中,如: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… 我有一个输入日期,可以以以下格
[
{
"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/2021:dd/mm/yyyy
结果可以是25或25/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示例为答案的聚合吗