|
1 |
| -const mongo = require("mongodb").MongoClient; |
| 1 | +const { MongoClient } = require("mongodb"); |
2 | 2 |
|
3 |
| -const url = `mongodb://${process.env.MONGODB_USERNAME}:${encodeURIComponent(process.env.MONGODB_PASSWORD)}@${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}`; |
| 3 | +const url = process.env.MONGODB_USERNAME && process.env.MONGODB_PASSWORD |
| 4 | + ? `mongodb://${process.env.MONGODB_USERNAME}:${encodeURIComponent(process.env.MONGODB_PASSWORD)}@${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}?authSource=admin` |
| 5 | + : `mongodb://${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}`; |
4 | 6 |
|
5 |
| -var insert = function(collection, data, resolve, reject) { |
6 |
| - const d = require(data); |
7 |
| - d.results.forEach((doc) => { |
| 7 | +async function insertData(collection, dataPath) { |
| 8 | + const data = require(dataPath); |
| 9 | + data.results.forEach((doc) => { |
8 | 10 | doc._id = doc.id;
|
9 | 11 | });
|
10 |
| - collection.insertMany(d.results, (err, r) => { |
11 |
| - if (err) { |
12 |
| - if (err.code != 11000) { |
13 |
| - return reject(err); |
14 |
| - } |
| 12 | + |
| 13 | + try { |
| 14 | + await collection.insertMany(data.results); |
| 15 | + console.log(`Inserted ${data.results.length} documents`); |
| 16 | + } catch (err) { |
| 17 | + if (err.code !== 11000) { |
| 18 | + throw err; |
15 | 19 | }
|
16 |
| - |
17 |
| - resolve(); |
18 |
| - }); |
| 20 | + console.log('Documents already exist, skipping insertion'); |
| 21 | + } |
19 | 22 | }
|
20 | 23 |
|
21 |
| -function loadWithRetry() { |
22 |
| - mongo.connect(url, { |
23 |
| - useUnifiedTopology: true, |
24 |
| - useNewUrlParser: true, |
25 |
| - connectTimeoutMS: 300, |
26 |
| - socketTimeoutMS: 300, |
27 |
| - }, (err, client) => { |
28 |
| - if (err) { |
29 |
| - console.error(`Error connecting, retrying in 300 msec: ${err}`); |
30 |
| - setTimeout(loadWithRetry, 300); |
31 |
| - return; |
32 |
| - } |
| 24 | +async function loadWithRetry() { |
| 25 | + const client = new MongoClient(url, { |
| 26 | + connectTimeoutMS: 30000, |
| 27 | + socketTimeoutMS: 30000, |
| 28 | + serverSelectionTimeoutMS: 30000, |
| 29 | + }); |
33 | 30 |
|
34 |
| - var promises = []; |
35 |
| - db = client.db(process.env.MONGODB_DATABASE); |
36 |
| - promises.push(new Promise((resolve, reject)=>{ |
37 |
| - insert(db.collection('catalog'), "./data/catalog.json", resolve, reject); |
38 |
| - })); |
| 31 | + try { |
| 32 | + console.log('Connecting to MongoDB...'); |
| 33 | + await client.connect(); |
| 34 | + console.log('Connected successfully'); |
39 | 35 |
|
40 |
| - Promise.all(promises) |
41 |
| - .then(function() { |
42 |
| - console.log('all loaded'); |
43 |
| - process.exit(0); |
44 |
| - }) |
45 |
| - .catch((err) => { |
46 |
| - console.error(`fail to load: ${err}`); |
47 |
| - process.exit(1); |
48 |
| - }); |
49 |
| - }); |
50 |
| -}; |
| 36 | + const db = client.db(process.env.MONGODB_DATABASE); |
| 37 | + await insertData(db.collection('catalog'), "./data/catalog.json"); |
| 38 | + |
| 39 | + console.log('All data loaded successfully'); |
| 40 | + await client.close(); |
| 41 | + process.exit(0); |
| 42 | + } catch (err) { |
| 43 | + console.error(`Error: ${err}`); |
| 44 | + await client.close(); |
| 45 | + |
| 46 | + console.log('Retrying in 3 seconds...'); |
| 47 | + setTimeout(loadWithRetry, 3000); |
| 48 | + } |
| 49 | +} |
51 | 50 |
|
52 | 51 | loadWithRetry();
|
0 commit comments