Как сохранить файл JSON из URI API непосредственно в коллекцию mongoDB в NodeJS

Я довольно новичок в MERN, и мне интересно, возможно ли это вообще. Если есть опыт, помогите :)

Вот мой наивный код:

1. Создайте клиент аксиом

const api = axios.create({
  method: 'GET',
  baseURL: 'https://api.someAPI.com',
  headers: {
    'API_KEY': process.env.API_KEY,
    Accept: 'application/json',
  },
});

2. Получите JSON и сохраните его в новой коллекции на MongoDB.

function getAPI_AndSaveToDB() {
  api('/api/v3/exactURI')
    .then((value) => res.json(value.data))
    .then(dbo.createCollection("myCollection")
    .then(myCollection.insertMany(value));
}

Да, это возможно. еще читабельнее/проще с асинхронным ожиданием

cmgchess 10.04.2023 23:32

@cmgchess, у вас есть рабочий код, пожалуйста? (асинхронное ожидание для меня довольно ясно, но я не знаю, как реализовать в этом примере)

Java bee 10.04.2023 23:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Один документ

Это пример использования Axios для запроса и официального драйвера MongoDB. Вы можете извлечь из этого уроки и адаптироваться к своим потребностям: возможно, вы захотите рассмотреть возможность использования ORM, такого как Mongoose, в зависимости от вашего проекта.

const axios = require('axios');
const { MongoClient } = require('mongodb');

async function fetchDataAndSaveToMongoDB() {
  // Fetch the JSON data from a URL
  const { data } = await axios.get('https://example.com/data.json');

  // Connect to MongoDB
  const client = new MongoClient('mongodb://localhost:27017');
  await client.connect();

  try {
    // Select the database and collection
    const db = client.db('mydb');
    const collection = db.collection('mycollection');

    // Insert the JSON data into the collection
    const result = await collection.insertOne(data);
    console.info(`${result.insertedCount} document(s) inserted`);
  } finally {
    // Close the MongoDB connection
    await client.close();
  }
}

fetchDataAndSaveToMongoDB();

Обратите внимание, что вам нужно будет установить модули axios и mongodb в вашем проекте Node.js, чтобы этот код работал. Вы можете сделать это, выполнив следующую команду в каталоге вашего проекта:

$ npm install axios mongodb

Несколько документов

Если запрошенный файл является массивом, вы можете заменить метод insertOne на метод insertMany драйвера MongoDB, чтобы вставить каждый элемент массива как отдельный документ в коллекцию.

ОБНОВЛЕНИЕ На данный момент я следую инструкциям @Ezequias Dinella (большое спасибо!), и этот код еще не готов, но это шаг вперед.

const axios = require('axios');
const { MongoClient } = require('mongodb');

async function fetchAndSaveDataToDB() {
  // Fetch the JSON data from a API URL
  const api = axios.create({
    method: 'GET',
    baseURL: process.env.BASE_URL,
    headers: {
      API_KEY: process.env.API_KEY,
      Accept: 'application/json',
    },
  });
  const { data } = await api.get(process.env.URI);

  // Insert the JSON data into the collection
  await mongoClient.connect();
  try {
    const database = mongoClient.db('myDB');
    //drop old collection
    const oldCollection = 'collection_12';
    const isDropped = database.collection(oldCollection).drop();
    if (!isDropped) {
      console.info(`ERROR:: ${oldCollection} not dropped`);
    } else {
      console.info(`${oldCollection} successfully dropped`);
    }

    // Insert the JSON data into a new collection
    const collectionName = 'collection_14';
    const theNewCollection = database.collection(collectionName);
    const options = { ordered: true }; //prevents insert docs if one fails
    const result = await theNewCollection.insertMany(data, options);
    console.info(
      `${result.insertedCount} documents in ${collectionName} successfully inserted`
    );
  } finally {
    await mongoClient.close();
  }
}

fetchAndSaveDataToDB().catch(console.dir);

Другие вопросы по теме