gpt4 book ai didi

javascript - 数组递增 Javascript/node js/mongodb

转载 作者:行者123 更新时间:2023-12-02 18:20:38 25 4
gpt4 key购买 nike

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

最佳答案

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

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

关于javascript - 数组递增 Javascript/node js/mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18861362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com