Правильный способ перебирать элементы в большом JSON, изменять их и вставлять один за другим в коллекцию в mongodb - PullRequest
0 голосов
/ 24 января 2019

Я получаю большой JSON из запроса к URL-адресу, затем я хочу просмотреть все из них и внести некоторые изменения в его объекты JSON, и, вот где у меня возникают проблемы, я хочу вставить каждый из них.измененный элемент JSON в коллекцию в mongodb.

Я совершенно новичок во всех этих технологиях, nodejs, express и mongodb.Буду признателен за все возможные рекомендации в этом процессе, чтобы научиться развиваться по этим технологиям.

//The request that gets the JSON and sends to the function to handle it
async.auto({
    'gatheringteams': [function (callback) {

        request(url, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                var sendresults = require('./public/javascripts/teams.js');
                sendresults.storeTeams(body);
            } else {
                console.log('error' + response.statusCode);
            }
        });

        callback(null);
    }],
},
    function (err, results) {
        if (err) {
            console.log(err);
        }
    }
);



//The function receiving the JSON
function storeTeams(results) {
    var parsed = JSON.parse(results);
    var getdbdefinition = require('./db');
    var dbconnection = getdbdefinition.getDb();
    var db = dbconnection.db('teamsdb');

    for (let key in parsed) {
        let parsedobject = parsed[key];
        db.collection('players').insertOne(parsedobject, function (err, result) {

            if (err) {
                console.log('Error!')
            }

            if(result){
                console.log('Inserted!');
            }

        });
    }
};

Проблема в том, что по какой-то причине insertone вставляет только 50 элементов, остальные не вставляются, и я 'Я не получаю ошибок, чтобы понять, что я делаю неправильно.(как вы видите, я не изменял объекты JSON, я пытаюсь вставить их как есть, но тоже не работает)

1 Ответ

0 голосов
/ 30 января 2019

Я получаю более 185 тыс. Записей, и они могут расти со временем.Хранение объектов в массиве - это то, что я использовал.

  1. Я получаю JSON из API и отправляю его функции.
  2. Разобрал этот JSON.
  3. Получите соединение с базой данных.
  4. Переберите проанализированный JSON и добавьте элементы в массив.
  5. Получите все элементы в коллекции.
  6. Когда элементыв коллекции возвращаются время для цикла по массиву с проанализированными элементами, где я проверяю, существует ли элемент в базе данных или является новым.

    db.collection ('Players'). find ({}) .toArray ((err, items) => {

    if (err) {
        logger.debug(err);
    }
    
    if (items) {
    
        for (var i = 0; i < listitems.length; i++) {
    
            var finditem = items.find(function (element) {
                return element['Name'] === listitems[i]['Name'];
            });
    
            if (finditem == null) {
                resultitems.push(listitems[i]);
            } else {
                // Modify if needed the item
            }
    
        }
    
        if (listitems.length > 0) {
    
            db.collection('players').deleteMany({}).then(function (r) {
    
                db.collection('players').insertMany(listitems, function (err, result) {
    
                    if (err) {
                        logger.debug('Error!')
                    }
    
                    if (result) {
                        logger.info('Data inserted!');
                    }
    
                });
    
            });
    
        } else {
            logger.info('No data to insert.')
        }
    
    }
    

    });

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