gpt4 book ai didi

node.js - MongoSkin 错误插入

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:26 25 4
gpt4 key购买 nike

我有一个包含具有以下结构的国家/地区的数组:

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

但是代码会为数组中的每个国家/地区插入数组中最后一个国家/地区的州(津巴布韦),而不是正确的州。我该如何修复它?

最佳答案

通常我们不会在同步循环(简单的 for 循环)之间使用异步查询(插入)。它给我们带来了异常的结果。 Node 提供了异步循环来克服这个问题。

首先需要异步模块。

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

谢谢

关于node.js - MongoSkin 错误插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com