NodeJS
var filter = {};
filter.strBillDate = {
"$gte": new Date(req.params.fromdate),
"$lt": new Date(req.params.todate)
};
Sales.find(filter).exec(function(err, salesdata) {
return res.send(salesdata);
});
在这里,它将过滤这两天之间的数据。我需要每天过滤这些时间之间的数据。(即一周内7点至10点(
您可以尝试使用聚合框架,并在筛选文档时利用日期聚合运算符。
您需要一个初始的$match
筛选器来筛选给定日期之间的文档。
然后,您可以使用$project
管道创建一个新字段,该字段使用$hour
运算符在日期字段中保存小时药剂。然后将应用另一个$match
来筛选小时范围内的文档。
举个例子,它展示了这种方法,考虑到聚合框架,您需要投影您想要返回的字段:
var filter = {};
filter.strBillDate = {
"$gte": new Date(req.params.fromdate), // start of week date
"$lt": new Date(req.params.todate) // end of week date
};
Sales.aggregate([
{ "$match": filter },
{
"$project": {
"strBillDate": 1,
"hourPart": { "$hour": "$strBillDate" },
/*
project other fields as necessary
*/
}
},
{ "$match": { "hourPart": { "$gte": 19, "$lte": 22 } } }
]).exec(function(err, salesdata) {
return res.send(salesdata);
});
一种更有效的方法是使用$redact
运算符的单个管道,如下所示:
Sales.aggregate([
{
"$redact": {
"$cond": [
{
"$and": [
{ "$gte": [ "$strBillDate", new Date(req.params.fromdate) ] },
{ "$lt": [ "$strBillDate", new Date(req.params.todate) ] },
{ "$gte": [ { "$hour": "$strBillDate" }, 19 ] },
{ "$lte": [ { "$hour": "$strBillDate" }, 22 ] }
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
]).exec(function(err, salesdata) {
if (!err) {
return res.send(salesdata);
}
});