【发布时间】:2020-10-04 23:31:00
【问题描述】:
我创建了一个脚本,它从 Binance API 接收数据并将其发送到 MongoDB。 脚本每小时使用 Node-Schedule 包启动,并且根据其符号(BTCUSDT、ETHUSDT、ATOMBTC)接收三个不同的数据。我还创建了一个脚本,它会自动将接收数据存储到 MongoDB 集合中。
目标:我想将特定数据存储到特定集合中。我的想法是制作类似if statement 的东西,并且符号名称与集合名称相同。例如
if symbol name = collection name => save to collection
这种方式能帮到我吗?我将拥有三个符号和三个集合。它们都将具有相同的名称。
完整代码
var today = new Date();
var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
var dateTime = date + ' ' + time;
var symbols = ["BTCUSDT", "ETHUSDT", "ATOMBTC"];
let cnt = 0;
const callIt = () => {
fetch(`https://api.binance.com/api/v3/klines?symbol=${symbols[cnt]}&interval=1h&limit=1`)
.then(res => res.json())
.then(data => {
const btcusdtdata = data.map(d => {
return {
Open: parseFloat(d[1]),
High: parseFloat(d[2]),
Low: parseFloat(d[3]),
Close: parseFloat(d[4]),
Volume: parseFloat(d[5])
}
});
console.log(btcusdtdata);
saveToBTCUSDT(btcusdtdata);
cnt++;
if (cnt < symbols.length) setTimeout(callIt, 3000)
})
.catch((err) => {
console.log(err);
})
};
const j = schedule.scheduleJob('0 * * * *', callIt)
const saveToBTCUSDT = function(BTCdata) {
const url = 'mongodb+srv://username:password@cluster0-1kunr.mongodb.net/<dbname>?retryWrites=true&w=majority';
MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, db) => {
if (err) throw err;
const dbo = db.db('CryptoCurrencies');
const myobj = { Name: 'BTCUSDT', Array: BTCdata, Date: dateTime };
dbo.collection('BTCUSDT').insertOne(myobj, (error, res) => {
if (error) throw error;
console.log('1 document inserted');
db.close();
});
});
};
【问题讨论】:
标签: javascript mongodb