根据MongoDB中的时间段获取数据
如何按时间段显示按日期计数的数据数量。根据MongoDB中的时间段获取数据
我们有槽
[{ '开始时间': “2017-04-20T08:30:00.000Z”, 'ENDTIME':“2017-04-20T09:30:00.000Z “},
{ '开始时间': “2017-04-20T09:30:00.000Z”, 'ENDTIME': “2017-04-20T10:30:00.000Z”},
{” startTime':“2017-04-20T10:30:00.000Z”, 'endTime':“2017-04-20T18:30:00.000Z”}]
输入
[{
"createdAt" : ISODate("2017-04-20T09:20:00.167Z"),
},
{
"createdAt" : ISODate("2017-04-20T14:20:00.167Z")
},
{
"createdAt" : ISODate("2017-04-20T11:20:00.167Z")
},
{
"createdAt" : ISODate("2017-04-20T14:20:00.167Z")
},
{
"createdAt" : ISODate("2017-04-20T12:20:00.167Z")
}]
要在这种格式显示数据
输出
[{ '开始时间':“2017-04-20T08:30:00.000 Z“, 'endTime':”2017-04-20T09:30:00.000Z“, 'count':1},
{ '开始时间': “2017-04-20T09:30:00.000Z”, 'ENDTIME': “2017-04-20T10:30:00.000Z”, '计数':0},
{ '开始时间': “2017-04-20T10:30:00.000Z”, 'ENDTIME': “2017-04-20T18:30:00.000Z”}, '计数':4]
您可以使用MongoDB的$gte
(大于或等于),$lte
(小于或等于),$gt
(大于) 和$lt
(小于)来指定日期范围。您可以在$gte/$gt
中指定“from”日期,在$lte/$lt
中指定“to”日期。
所以您的查询应该是这样的 -
db.collection.count({createdAt: {$gte: "your from date in ISO date object format", $lte: "your to date in ISO date object format"}}, function (err, count){
//whatever you wanna do with count
})
或
db.collection.find({createdAt: {$gte: "your from date in ISO date object format", $lte: "your to date in ISO date object format"}}).count(function (err, count){
//whatever you wanna do with count
})
的时间每个插槽,你将不得不在一个循环中运行此。所以只是作为一个例子,它看起来像 -
db.collection.find({createdAt: {$gte: timeRangeArr[i].startTime, $lte: timeRangeArr[i].endTime}}).count(function (err, count){
//whatever you wanna do with count
})
var tempData = [],
for(var i = 0; i <inputData.length ; i++){
var condition = {
'$sum':{'$cond':
[{'$and':
[{'$gte': ['$checkinData.time', new Date(inputData[i].startTime)]},
{'$lt' : ['$checkinData.time', new Date(inputData[i].endTIme)]}
]},1,0]
}
}
tempData.push(condition);
}
请提供关于为什么/如何回答的一些解释这段代码可以解决这个问题。 – VPK
**有没有使用循环任何其他方法** .suppose我们有10的20倍插槽,那么你必须重复10〜20次根据时隙循环查询,并在数据库中查询10-20次。 –
我不这么认为。查询只能使用1 $ gte/$ gtand 1 $ lte/$ lt,它可以只有1个值。所以它将不得不循环运行。如果您担心以同步方式运行它们,那么可以并行运行它们,检查名为async的npm模块 - https://caolan.github.io/async/ –