如何在 mongo DB 中编写查询或聚合,如下所示
select *
from final
where Week=month(todaysdate())+"-"+day(todaysdate())+"-"+year(todaysdate()))
如何在 mongo DB 中编写查询或聚合,如下所示
select *
from final
where Week=month(todaysdate())+"-"+day(todaysdate())+"-"+year(todaysdate()))
假设数据库中有以下文档:
{ "_id" : ObjectId("614ce00e6db392727c999e7f"), "Week" : "09-23-2021" }
这是一个聚合...
db.collection.aggregate([
{
$project:
{
Week:
{
$dateFromString:
{
dateString: "$Week",
format: "%m-%d-%Y"
}
}
}
},
{
$match: { $expr: { $eq: [ "$Week", { $dateFromParts: {"year": new Date().getFullYear(), "month": new Date().getMonth() + 1, "day": new Date().getDate() } } ] } }
}
])
解释
第一阶段:$Project - 以我们可以使用合法 ISODate() 对象进行比较的方式解释日期字符串。使用 $dateFromString 表达式将字段文本数据转换为 ISODate()。
第二阶段:$Match - 使用 $expr 表达式运算符将字段路径变量 $Week 通过组合没有时间戳部分的日期与当前日期进行比较。匹配并返回具有相等匹配的那些。
警告
日期方法 getMonth() 总是按照人类的预期关闭 1。一月是零月。出于这个原因,为了匹配您的预期日期字符串,将 +1 添加到聚合中。
假设
建议
将日期数据存储为 ISODate() 而不是字符串,然后使用范围查询查找两个不同时间点之间的数据元素。如果您对一整天感兴趣,则范围应为第一个日期的午夜(含)和第二天的午夜(不含)。确保您在字段上有索引,以便范围查询有效地工作。注意时区的东西。Mongo 喜欢以 UTC 格式存储所有内容。