簡體   English   中英

如何使用來自外部API的數據為mongodb播種?

[英]How do I seed mongodb with data from an external API?

我正在嘗試學習NodeJS。 我正在使用貓鼬和mLab。 我對這些技術中的每一項都是新手。

目前,我的模型是這樣的。 稍后,我將向架構添加一些內容。

const mongoose = require("mongoose");
const fetchData = require("../seed");

const schema = mongoose.Schema;

const dataSchema = new Schema({});

module.exports = recallData = mongoose.model("recalls", dataSchema);

我還制作了一個種子文件來獲取數據。

const Recall = require("./models/Recall");

 module.exports = function getData(req, res) {
  const urls = [url1, url2, url3];

  urls.map(url => {
    fetch(url)
      .then(res => res.json())
      .then(data =>
        data.results.map(recalls => {
          let recs = new Recall(recalls);
          recs.save;
        })
      );
  });
}

我的問題是如何使獲取運行並填充數據庫? 有命令或貓鼬功能可以做到這一點嗎? 我知道我基本上是在嘗試使用種子文件來模擬Rails。 也許這不是在Node中完成的方法。 任何幫助都非常感謝。

事實證明這很簡單。 我只需要睡一晚。 我需要連接到貓鼬,並在save()之后斷開連接。

現在,代碼如下所示。 我仍然需要在其中添加和編輯一些內容。 任何聰明的重構建議,表示贊賞。

const mongoose = require("mongoose");
const Recall = require("./models/Recall");
const db = require("./config/keys").mongoURI;
const fetch = require("node-fetch");
const URLS = require("./config/seedURLs");

let resultData;
let saveCounter = 0;

mongoose
  .connect(db)
  .then(() => console.log("mongodb connection success"))
  .catch(error => console.log(error));

URLS.map(async url => {
  try {
    const response = await fetch(url);
    const json = await response.json();
    resultData = [...json.results];

    for (let i = 0; i < resultData.length; i++) {
      let temp = new Recall({
        key1: resultData[i].key1,
        key2: resultData[i].key2,
        .
        .
        .
      });

      temp.save(() => {
        saveCounter++;
        if (saveCounter === resultData.length) {
          mongoose
            .disconnect()
            .then(() => console.log("mongodb disconnected"))
            .catch(error => console.log(error));
        }
      });
    }
  } catch (error) {
    console.log(error);
  }
});

運行節點seed.js命令。 這是一般的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM