繁体   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