0

我正在尝试使用 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内部函数中的数据正确。

4

1 回答 1

2

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

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

于 2013-09-17T23:21:13.783 回答