【问题标题】:Storing the data to MongoDB collection to specific name将数据存储到 MongoDB 集合到特定名称
【发布时间】: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


    【解决方案1】:

    您可以将当前索引(计数)作为参数传递,然后使用该索引寻址所需的集合。

        ...
        saveToBTCUSDT(btcusdtdata, cnt);
        ...
    
        const saveToBTCUSDT = function(BTCdata, index) {
    
         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: symbols[index], Array: BTCdata, Date: dateTime };
             dbo.collection( symbols[index] ).insertOne(myobj, (error, res) => {
                 if (error) throw error;
                 console.log('1 document inserted');
                 db.close();
             });
         });
       };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      相关资源
      最近更新 更多