Я довольно новичок в 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, у вас есть рабочий код, пожалуйста? (асинхронное ожидание для меня довольно ясно, но я не знаю, как реализовать в этом примере)





Это пример использования 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);
Да, это возможно. еще читабельнее/проще с асинхронным ожиданием