Mongoose 按日期范围查询
Mongoose query by date ranges with moment
我的条件代码如下:
if (req.query.df == "today") {
start = moment().subtract(1,'days');
end = moment().add(1,'days');
condition = {"$gt":start, "$lt":end};
} else if(req.query.df == "yesterday") {
start = moment().subtract(2, 'days');
end = moment().subtract(1, 'days');
condition = {"$gt":start, "$lt":end};
}
我的猫鼬查询:
QuestionResource
.find({$and: [{status: status}, {"created_at": condition}]})
第一个案例“今天”的结果
[
{
"_id":"564717725971cffc2309e7a8",
"title":"asdasdas",
"text":"dasdasdasd",
"created_at":"2015-11-14T11:13:54.823Z"
},
{
"_id":"5637611ce6dafbf02af3c4b4",
"title":"fffffff",
"text":"asdasdasdasdasdasd",
"created_at":"2015-11-13T13:11:56.103Z"
}
]
第二行不应在此数组中。
另一个案例“昨天”
[
]
问题集合包含超过 20 行,在本周 created_at
个不同的时间。
我该如何解决这个问题?
您的查询都不能保证返回今天或昨天的条目,如果这是您想要完成的。否则它们会像写的那样完美地工作。
你今天查询 returns 从 hour/minute/second 调用时的所有记录,但是昨天,到当前 hour/minute... 明天。这就是为什么你得到昨天的日期。如果只需要今天的记录,则需要将 $gt 条件设置为昨天的实际结束时间(或今天的开始时间)。您可以为此使用 moment().endOf('day') 函数。
您昨天的条件的工作方式类似,因为它们会在两天前和一天前的当前 hour/minute 时间之间进行搜索。您可能没有该范围内的任何数据。您还需要将 $gt 和 $it 日期设置为当天结束。
我的条件代码如下:
if (req.query.df == "today") {
start = moment().subtract(1,'days');
end = moment().add(1,'days');
condition = {"$gt":start, "$lt":end};
} else if(req.query.df == "yesterday") {
start = moment().subtract(2, 'days');
end = moment().subtract(1, 'days');
condition = {"$gt":start, "$lt":end};
}
我的猫鼬查询:
QuestionResource
.find({$and: [{status: status}, {"created_at": condition}]})
第一个案例“今天”的结果
[
{
"_id":"564717725971cffc2309e7a8",
"title":"asdasdas",
"text":"dasdasdasd",
"created_at":"2015-11-14T11:13:54.823Z"
},
{
"_id":"5637611ce6dafbf02af3c4b4",
"title":"fffffff",
"text":"asdasdasdasdasdasd",
"created_at":"2015-11-13T13:11:56.103Z"
}
]
第二行不应在此数组中。
另一个案例“昨天”
[
]
问题集合包含超过 20 行,在本周 created_at
个不同的时间。
我该如何解决这个问题?
您的查询都不能保证返回今天或昨天的条目,如果这是您想要完成的。否则它们会像写的那样完美地工作。
你今天查询 returns 从 hour/minute/second 调用时的所有记录,但是昨天,到当前 hour/minute... 明天。这就是为什么你得到昨天的日期。如果只需要今天的记录,则需要将 $gt 条件设置为昨天的实际结束时间(或今天的开始时间)。您可以为此使用 moment().endOf('day') 函数。
您昨天的条件的工作方式类似,因为它们会在两天前和一天前的当前 hour/minute 时间之间进行搜索。您可能没有该范围内的任何数据。您还需要将 $gt 和 $it 日期设置为当天结束。