数组递增Javascript/node js/mongodb
我正在尝试使用节点JS从MongoDB收集数据,以便稍后绘制图形 我的目标是按小时收集所有条目。在我的收藏中有一个“created_at”字段,用于存储日期对象 我尝试将数据存储在一个包含24个插槽的阵列中,如下所示:数组递增Javascript/node js/mongodb,javascript,arrays,node.js,mongodb,Javascript,Arrays,Node.js,Mongodb,我正在尝试使用节点JS从MongoDB收集数据,以便稍后绘制图形 我的目标是按小时收集所有条目。在我的收藏中有一个“created_at”字段,用于存储日期对象 我尝试将数据存储在一个包含24个插槽的阵列中,如下所示: // padding the array for each hour of the day var hours = new Array(23); // defaulting the value for each hour to 0 for(var i=0; i<hours
// padding the array for each hour of the day
var hours = new Array(23);
// defaulting the value for each hour to 0
for(var i=0; i<hours.length; i++){
hours[i] = 0;
}
db.collection.find({}, {"created_at": 1}, function(err, entry){
if (err){ doSomething(); }
else {
entry.forEach(function(item, index){
// get hour of the day from the Date object
h = item["created_at"].getHours();
h = parseInt(h);
// store hour of the day and count it up
hours[h]++;
console.log("#%s: %s", index, h);
});
}
});
console.log(hours);
//为一天中的每个小时填充数组
var小时数=新阵列(23);
//将每小时的值默认为0
对于(var i=0;i我怀疑问题在于并发性:集合的.find
方法是异步的。因此,在调用.find
之后,在项之前执行后的控制台.log
。forEach
甚至执行过。尝试将控制台.log
移动到else
子句的主体中,在forEach
之后(这是同步的),您应该会看到您要查找的结果
展望未来,你必须使用承诺或其他方法来获得你想要的结果。你的怀疑是正确的,而且实际上非常符合逻辑。我对这种异步/回调的东西还是新手。谢谢。我做JavaScript异步编程已经快一年了,我仍然经常会被它咬一口。这是一只狡猾的野兽!