我想按日期获取所有数据,同时按降序传递自定义日期范围。这是我的代码
var start = new Date(req.body.from_date); // 2018-12-03
start.setHours(0,0,0,0);
var end = new Date(req.body.to_date); // 2018-12-03
end.setHours(23,59,59,999);
db.companies.aggregate([{
$match: {
$and : [
{startDate: {$gte:start} },
{endDate: {$lte:end} }
]
},
},
{
$group:{
_id:{ startDate:"$startDate",endDate:"$endDate",
day: { $dayOfMonth: "$entry_date" },
month: { $month: "$entry_date" },
year: { $year: "$entry_date" }
},
count: { $sum:1 },
date: { $first: "$entry_date" }
}
},
{
$sort:{ entry_date: -1 }
}
{
$project:{
date:{
$dateToString: { format: "%Y-%m-%d", date: "$date" }
},
count: 1,
_id: 0
}
}])
如果我没有通过$ match条件,它将显示带有日期的数据计数,但是当我尝试通过并使其条件不起作用时。有什么想法吗?
预先感谢
答案 0 :(得分:0)
日期包装在MongoDb内置的ISODate()帮助函数中,这是一种方便的方式以可视方式将日期表示为字符串,同时仍允许充分使用日期查询和索引。
尝试一下:
$and : [
{startDate: {$gte: ISODate("2018-11-10T18:30:00.000Z")} },
{endDate: {$lte: ISODate("2018-11-30T18:29:59.999Z")} }
]
答案 1 :(得分:0)
我已修复它,$ project需要在$ match条件下需要我们所有的字段,就像我想要日期范围的结果一样,我的字段是entry_date
这是我的代码...
var company_id= company._id
var start = new Date(req.body.from_date);
start.setHours(0,0,0,0);
var end = new Date(req.body.to_date);
end.setHours(23,59,59,999);
VisitorCompany.aggregate(
[
{
$match: {
$and:[
{ entry_date: { $gt: start, $lt: end } },{company_id:""+company_id+""}
]
}
},
{ $sort : { entry_date : -1 } },
{
$group:
{
_id:
{
day: { $dayOfMonth: "$entry_date" },
month: { $month: "$entry_date" },
year: { $year: "$entry_date" }
},
count: { $sum:1 },
entry_date: { $first: "$entry_date" }
}
},
{
$project:
{
entry_date:
{
$dateToString: { format: "%Y-%m-%d", date: "$entry_date" }
},
count: 1,
_id: 0
}
}
])
输出在这里...
{
"count": 1,
"entry_date": "2018-11-18"
},
{
"count": 2,
"entry_date": "2018-11-22"
},
{
"count": 2,
"entry_date": "2018-11-23"
},