数组递增Javascript / node js / mongodb

时间:2013-09-17 23:10:44

标签: javascript arrays node.js mongodb

我正在尝试使用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获得了正确的数据。

1 个答案:

答案 0 :(得分:2)

我怀疑问题是并发问题:集合的.find方法是异步的。因此,console.log调用之后.find会在entry.forEach执行之前执行。尝试将console.log移到else子句中,forEach(同步)之后,您应该看到要查找的结果。

展望未来,你必须使用承诺或其他东西来获得你想要的结果。