Node.js MongoSkin错误插入
我有一个具有以下结构的国家阵列:Node.js MongoSkin错误插入,node.js,mongodb,mongoskin,Node.js,Mongodb,Mongoskin,我有一个具有以下结构的国家阵列: { "code": "ZW", "name": "Zimbabwe", "zipPattern": "[\\s\\S]*", "states": [ { "name": "Bulawayo" }, { "name": "Harare" }, { "name": "Manicalan
{
"code": "ZW",
"name": "Zimbabwe",
"zipPattern": "[\\s\\S]*",
"states": [
{
"name": "Bulawayo"
},
{
"name": "Harare"
},
{
"name": "Manicaland"
},
{
"name": "Mashonaland Central"
},
{
"name": "Mashonaland East"
},
{
"name": "Mashonaland West"
},
{
"name": "Masvingo"
},
{
"name": "Matabeleland North"
},
{
"name": "Matabeleland South"
},
{
"name": "Midlands"
}
]
}
我正在尝试使用带有以下代码的MongoSkin
将它们插入MongoDb
var countries = require('./mongo/ready/Countries');
db.collection('countries').find().toArray(function (err, result) {
if (result.length === 0) {
for (var i = 0; i < countries.length; i++) {
var obj = countries[i];
var states = obj.states;
db.collection('countries').insert({
name: obj.name,
code: obj.code,
zipPattern: obj.zipPattern
}, function (error, countryResult) {
var id = countryResult[0]._id;
for (var j = 0; j < states.length; j++) {
var state = states[j];
db.collection('states').insert({
countryId: id,
name: state.name
}, function (stateError, stateResult) {
if (stateError) console.log(stateError);
console.log(stateResult);
});
}
});
}
}
});
var-countries=require('./mongo/ready/countries');
db.collection('countries').find().toArray(函数(err,result){
如果(result.length==0){
对于(变量i=0;i
但是代码为数组中的每个国家插入数组中最后一个国家(津巴布韦)的州,而不是正确的州。如何修复它?通常我们不在同步循环(简单for循环)之间使用异步查询(插入)。它给我们带来了异常的结果。节点提供异步循环以克服此问题 首先,这需要异步模块
var async = require('async');
现在,您可以使用以下代码插入国家及其各自的州
async.each(countries, function(obj, callback) {
var states = obj.states;
db.collection('countries').insert({
name: obj.name,
code: obj.code,
zipPattern: obj.zipPattern
}, function(error, countryResult) {
if (error) {
callback(error);
} else {
var id = countryResult[0]._id;
async.each(states, function(state, callback) {
db.collection('states').insert({
countryId: id,
name: state.name
}, function(stateError, stateResult) {
if (stateError) {
callback(stateError);
} else {
callback();
}
});
});
callback();
}
}); }, function(err) {
if (err) {
// handle error here
} else {
// do stuff on completion of insertion
} });
谢谢