我正在尝试使用Node 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.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);
现在,当我记录hours
时,我得到了具有默认值的数组。即[0,0,0,0 ... 0]
我确定数据库具有正确的值,因为内部函数中的console.log
获得了正确的数据。
答案 0 :(得分:2)
我怀疑问题是并发问题:集合的.find
方法是异步的。因此,console.log
调用之后.find
会在entry.forEach
执行之前执行。尝试将console.log
移到else
子句中,forEach
(同步)之后,您应该看到要查找的结果。
展望未来,你必须使用承诺或其他东西来获得你想要的结果。