2016-04-19 26 views
1

私はMEAN STACKでプロジェクトを開発中ですので、国、州、都市をインポートする必要があります 次のコードからです。
jsonファイルから国や州をインポートできますが、都市ではすべてではなく最初の文書(レコード)のみをインポートできます。mongodbに文書(レコード)を挿入できません

Route.js

router 
    .route('/api/user/loadcity') 
    .get(
     function(req, res, next) { 
      var fs = require("fs"); 
      fs.readFile('/home/user7/Downloads/city.json', 'utf8', function (err,data) { 
       data = JSON.parse(data); 
       for(var i = 0; i < data.length; i++) { 
       console.log(data[i].city_name); 
       var newCity = new City({ 
        id:data[i].id, 
        country_id : data[i].country_id, 
        state_id : data[i].state_id, 
        city_name : data[i].city_name, 
        is_active : data[i].is_active 
       }); 
       newCity.save(function (err) { 
        if(err){ 
         console.log(err); 
        } 
       }); 
       } 
      }); 
     }); 


router 
    .route('/api/user/loadcountry') 
    .get(
     function(req, res, next) { 
      var fs = require("fs"); 
      fs.readFile('/home/user7/Downloads/country.json', 'utf8', function (err,data) { 
       data = JSON.parse(data); 
       for(var i = 0; i < data.length; i++) { 
       //console.log(data[i].city_name); 
       var newCountry = new Country(); 
       newCountry.id = data[i].id; 
       newCountry.country_name = data[i].country_name; 
       newCountry.country_code = data[i].country_code; 
       newCountry.country_flag = data[i].country_flag; 
       newCountry.is_active = data[i].is_active; 
       newCountry.save(function (err) { 
        if(err) console.log(err); 
       }); 
       } 
      }); 
     }); 



router 
    .route('/api/user/loadstate') 
    .get(
     function(req, res, next) { 
      var fs = require("fs"); 
      fs.readFile('/home/user7/Downloads/state.json', 'utf8', function (err,data) { 
       data = JSON.parse(data); 
       for(var i = 0; i < data.length; i++) { 
       console.log(data[i].state_name); 
       var newState = new State({ 
        id:data[i].id, 
        country_id : data[i].country_id, 
        state_name : data[i].state_name, 
        is_active : data[i].is_active 
       }); 
       newState.save(function (err) { 
        if(err) console.log(err); 
       }); 
       } 
      }); 
     }); 

形態正常に動作して上記コードloadcountryとLoadStateのルーティングコード、 しかしloadcityルーティングコードは、一つの文書(レコード)を挿入することができます。

依存関係

country.json => 
     file size 48.9 kB (48,883 bytes) 
     total records 252 
state.json => 
     file size 362.5 kB (3,62,478 bytes) 
     total records 2800 
city.json  => 
     file size 21.0 MB (2,09,63,600 bytes) 
     total records 142987 

"express" => "version": "4.13.4", 
"mongoose" => "version": "4.4.4", 
"mongodb" => "version": "2.4.9", 
"OS" => "ubuntu 14.04 lts 32bit", 

誰もがこれらのすべての都市を挿入するために私を助けることができます。

答えて

1

あなたのcountrystateがどのように正常に動作しているかわかりません。 mongodbでのI/O操作の保存は、性質上、asyncであり、forループはsyncです。挿入されたvaluesは配列の最後の項目になります。

あなたはこの1つを解決するためにクロージャを使用することができ

..

router 
    .route('/api/user/loadcity') 
    .get(
     function(req, res, next) { 
      var fs = require("fs"); 
      fs.readFile('/home/user7/Downloads/city.json', 'utf8', function(err, data) { 
       data = JSON.parse(data); 
       for (var i = 0; i < data.length; i++) { 
        (function(i){ 
        console.log(data[i].city_name); 
        var newCity = new City({ 
         id: data[i].id, 
         country_id: data[i].country_id, 
         state_id: data[i].state_id, 
         city_name: data[i].city_name, 
         is_active: data[i].is_active 
        }); 
        newCity.save(function(err) { 
         if (err) { 
          console.log(err); 
         } 
        }); 
        })(i);      
       } 
      }); 
     }); 

asyncライブラリアドバイスを

async.forEach(data, function(data, callback) { 

    });  
+0

感謝を使用しますが、このコードはまた、最初のドキュメント(レコード)を挿入するだけでなく、すべてまたは最後の、私に別の提案をしてください。 – laxman

+0

非同期ライブラリを使用し、async.forEachを使用する...これはあなたに問題をソートするはずです – Thalaivar

関連する問題