【问题标题】:Array incrementing Javascript / node js / mongodb数组递增 Javascript / node js / mongodb
【发布时间】:2013-09-17 23:10:44
【问题描述】:

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

【问题讨论】:

    标签: javascript arrays node.js mongodb


    【解决方案1】:

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

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

    【讨论】:

    • 您的怀疑是正确的,实际上非常合乎逻辑。我对这个异步/回调的东西还是陌生的。谢谢
    • 我从事 JavaScript 异步编程已经快一年了,而且我仍然经常被它所吸引。这是一只滑溜溜的野兽!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多