【发布时间】:2021-02-04 23:17:17
【问题描述】:
我正在尝试从 Mongo 数据库的集合中检索过去一个月的一些数据,它应该每个月运行一次,所以我想要一个可以在每月第一天运行的查询,以生成基于以下数据的报告查询。所以我试图使用 $lt 和 $gte 来限制日期范围。需要过滤的日期是数组中的一个值。 例如: 以下是集合名称为 Test 的集合数据:
{
"_id" : ObjectId("1234528f4a224cdb39aaa"),
"Project" : "12345",
"Department" : "Sales",
"Summary" : "TEST",
"FirstName" : "Mary",
"LastName" : "White",
"activities" : [
{
"Type" : "Trip",
"dateOfActivity" : ISODate("2020-12-20T06:00:00.000Z")
},
{
"Type" : "Conference",
"dateOfActivity" : ISODate("2021-01-05T06:00:00.000Z"),
"Note" : "test"
}
]
所以我想运行一个查询来检索过去 15 天的活动日期的所有信息。所以我使用了以下查询:
db.Test.find( { 'activities.dateOfActivity': { $lt: new Date(), $gte :new Date(new Date().setDate(new Date().getDate()-15)) }})
然后我注意到返回记录不限于过去 15 天内的所有活动。然后我尝试运行查询:
db.Test.find( { 'activities.dateOfActivity': { $gte : ISODate("2021-02-04T06:00:00.000Z")}})
这也不限制查询记录。返回的记录包含 2020 年 12 月 27 日的一些数据。我在哪里做错了查询?
此外,根据这个 dateofActivity 字段检索过去一个月的结果的最佳方法是什么?例如,如果我想在每个月的第一天运行此报告以检索上个月的记录?
【问题讨论】:
标签: mongodb mongodb-query