我有一个在Heroku服务器上托管的网站(我是Heroku btw的新手),并且因为它在免费软件包下,它在30米不活动后睡觉,并且当用户点击它时再次投入使用,它需要大约7秒npm run start
成功.
我正在考虑运行一个nodejs工作或者每29米打开一个网站的东西,以便服务器永远不会睡觉,最初,我有这样的事情:
(function wakeup() {
require('open')('https://mywebsite.herokuapp.com', (err) => {
if (err) throw err;
console.log('Woke up!');
setTimeout(wakeup, 1740000); //29m
});
})()
Run Code Online (Sandbox Code Playgroud)
注意:这只是在浏览器中打开它,但不处理关闭它.
以下是我的mongodb结构:
[{
_id: '111',
items: [{
productId: '123'
}]
}, {
_id: '222',
items: [{
productId: '123'
}, {
productId: '456'
}]
}, {
_id: '333',
items: [{
productId: '123'
}, {
productId: '456'
}, {
productId: '789'
}]
}]
Run Code Online (Sandbox Code Playgroud)
我期望分组和计数productId
,结果是:
[{
productId: '123',
count: 3
}, {
productId: '456',
count: 2
}, {
productId: '789',
count: 1
}]
Run Code Online (Sandbox Code Playgroud)
好吧,我尝试过这样使用aggregation
,但我认为我弄错了:
const aggregatorOpts = [{
$group: {
_id: "$items.productId",
count: { $sum: 1 }
}
}]
Model.aggregate(aggregatorOpts).exec() …
Run Code Online (Sandbox Code Playgroud) 根据MongoDB官方文档,它指出:
ObjectId值由12个字节组成,其中前四个字节是反映ObjectId创建的时间戳,尤其是:
- 一个4字节的值,表示自Unix时代以来的秒数,
- 一个3字节的机器标识符,
- 一个2字节的进程ID,以及
- 一个3字节的计数器,以随机值开头。
我只是想知道2038年1月19日星期二格林尼治标准时间会发生什么,当时unix时间等于2147483648,这不适合ObjectId * philosoraptor meme *中的4字节时间戳