0

如何在 mongo DB 中编写查询或聚合,如下所示

select * 
from final 
where Week=month(todaysdate())+"-"+day(todaysdate())+"-"+year(todaysdate()))
4

1 回答 1

1

假设数据库中有以下文档:

{ "_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 添加到聚合中。

假设

  • “周”字段具有字符串数据。
  • “周”字段中的数据格式为 MM-DD-YYYY。

建议

将日期数据存储为 ISODate() 而不是字符串,然后使用范围查询查找两个不同时间点之间的数据元素。如果您对一整天感兴趣,则范围应为第一个日期的午夜(含)和第二天的午夜(不含)。确保您在字段上有索引,以便范围查询有效地工作。注意时区的东西。Mongo 喜欢以 UTC 格式存储所有内容。

于 2021-09-23T20:39:45.287 回答