不能将文件(logging)插入到mongodb中

我正在开发项目,我需要导入国家,州和城市从下面的代码。
我可以从json文件导入国家和州,但城市只能导入第一个文件(logging),而不是全部。

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路由代码只能插入一个文件(logging)。

依赖

 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", 

任何人都可以帮我插入这些所有的城市。

我不知道你的country state是如何工作的。 保存为mongodb中的I / O操作本质上是async的,for循环是sync 。插入的values将是数组中的最后一项。

你可以使用闭包来解决这个问题..

 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) { });