我正在MEAN STACK开发项目,我需要进口国家,州和城市
从以下代码。
我可以从json文件导入国家和州,但城市只能导入第一个文档(记录)而不是全部。
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",
任何人都可以帮我插入所有城市。
答案 0 :(得分:1)
我不确定您country
和state
的工作正常。在mongodb中保存为I / O操作本质上是async
,而循环是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) {
});